function varargout = confplot(varargin)
%CONFPLOT Linear plot with continuous confidence/error boundaries.
%
%   CONFPLOT(X,Y,L,U) plots the graph of vector X vs. vector Y with
%   'continuous' confidence/error boundaries specified by the vectors
%   L and U.  L and U contain the lower and upper error ranges for each
%   point in Y. The vectors X,Y,L and U must all be the same length.  
%
%   CONFPLOT(X,Y,E) or CONFPLOT(Y,E) plots Y with error bars [Y-E Y+E].
%   CONFPLOT(...,'LineSpec') uses the color and linestyle specified by
%   the string 'LineSpec'.  See PLOT for possibilities.
%
%   H = CONFPLOT(...) returns a vector of line handles.
%
%   For example,
%      x = 1:0.1:10;
%      y = sin(x);
%      e = std(y)*ones(size(x));
%      confplot(x,y,e)
%   draws symmetric continuous confidence/error boundaries of unit standard deviation.
%
%   See also ERRORBAR, SEMILOGX, SEMILOGY, LOGLOG, PLOTYY, GRID, CLF, CLC, TITLE,
%   XLABEL, YLABEL, AXIS, AXES, HOLD, COLORDEF, LEGEND, SUBPLOT, STEM.
%
%     copywright 2002 - Michele Giugliano, PhD (http://www.giugliano.info) (Bern, Monday Nov 4th, 2002 - 19:02)
%    (bug-reports to michele@giugliano.info)
%   $Revision: 1.0 $  $Date: 2002/11/11 14:36:08 $
%                        

if (nargin<2)
 disp('ERROR: not enough input arguments!');
 return;
end % if

x = [];  y = [];  z1 = [];  z2 = [];  spec = '';

switch nargin
 case 2
  y  = varargin{1};
  z1 = y + varargin{2};
  z2 = y - varargin{2};
  x  = 1:length(y);
 case 3
  x  = varargin{1};
  y  = varargin{2};
  z1 = y + varargin{3};
  z2 = y - varargin{3};
 case 4
  x  = varargin{1};
  y  = varargin{2};
  z1 = y + varargin{4};
  z2 = y - varargin{3};
end % switch

if (nargin >= 5)
 x  = varargin{1};
 y  = varargin{2};
 z1 = y + varargin{4};
 z2 = y - varargin{3};
 spec = 'ok';
end % 


p = plot(x,y,x,z1,x,z2);    YLIM = get(gca,'YLim');    delete(p);
a1 = area(x,z1,min(YLIM)); 
hold on;
set(a1,'LineStyle','none');     set(a1,'FaceColor',[0.9 0.9 0.9]);
a2 = area(x,z2,min(YLIM)); 
set(a2,'LineStyle','none');     set(a2,'FaceColor',[1 1 1]);
if (~isempty(spec)),     
 spec = sprintf('p = plot(x,y,varargin{5}');
 for i=6:nargin,  spec = sprintf('%s,varargin{%d}',spec,i); end % for
 spec = sprintf('%s);',spec);
 eval(spec);
else                     p = plot(x,y,'k--'); 
end;
hold off;

%set(gca,'Layer','top','XGrid','on','YGrid','on');               
set(gca,'Layer','top');               

H = [p, a1, a2];

if (nargout>=1) varargout{1} = H; end;