function [] = printmat(a,name,rlab,clab)
%PRINTMAT Print matrix with labels.
%
%	PRINTMAT(A,NAME,RLAB,CLAB) prints the matrix A with the row labels
%	RLAB and column labels CLAB.  NAME is a string used to name the 
%	matrix.  RLAB and CLAB are string variables that contain the row
%	and column labels delimited by spaces.  For example, the string
%
%		RLAB = 'alpha beta gamma';
%
%	defines 'alpha' as the label for the first row, 'beta' for the
%	second row and 'gamma' for the third row.  RLAB and CLAB must
%	contain the same number of space delimited labels as there are 
%	rows and columns respectively.
%
%	PRINTMAT(A,NAME) prints the matrix A with numerical row and column
%	labels.  PRINTMAT(A) prints the matrix A without a name.
%
%	See also: PRINTSYS.

%	Clay M. Thompson  9-24-90
%	Copyright (c) 1986-93 by the MathWorks, Inc.

error(nargchk(1,4,nargin));

[nrows,ncols] = size(a);

if nargin<2, name = []; end
if nargin==3, error('Wrong number of input arguments.'); end
if nargin<4,
  rlab = []; clab = [];
  for i=1:nrows, rlab = [rlab, '--',int2str(i),'--> ']; end
  for i=1:ncols, clab = [clab, '----',int2str(i),'---- ']; end
  rlab=rlab(1:length(rlab)-1);
  clab=clab(1:length(clab)-1);
end

col_per_scrn=5;
len=12;


if (nrows==0)|(ncols==0), 
  if ~isempty(name), disp(' '), disp([name,' = ']), end
  disp(' ')
  disp('     []')
  disp(' ')
  return
end

% Remove extra spaces (delimiters)
ndx1 = find(clab==' ');
ndx2 = find([ndx1,0]==[-1,ndx1+1]);
if ~isempty(clab), clab(ndx1(ndx2))=[]; end

ndx1 = find(rlab==' ');
ndx2 = find([ndx1,0]==[-1,ndx1+1]);
if ~isempty(rlab), rlab(ndx1(ndx2))=[]; end

% Determine position of delimiters
cpos = find(clab==' ');
if length(cpos)<ncols-1, error('Not enough column labels.'); end
cpos = [0,cpos,length(clab)+1];

rpos = find(rlab==' ');
if length(rpos)<nrows-1, error('Not enough row labels.'); end
rpos = [0,rpos,length(rlab)+1];

col=1;
n = min(col_per_scrn-1,ncols-1);
disp(' ')
if ~isempty(name), disp([name,' = ']), end	% Print name
while col<=ncols
  % Print labels
  s = ' '*ones(1,len+1);
  for j=0:n,
    lab = clab(cpos(col+j)+1:cpos(col+j+1)-1);
    if length(lab)>len,
      lab=lab(1:len);
    else
      lab=[' '*ones(1,len-length(lab)),lab]; end
    s= [s,' ',lab];
  end
  disp(s)
  for i=1:nrows,
    s = rlab(rpos(i)+1:rpos(i+1)-1); 
    if length(s)>len, s=s(1:len); else s=[' '*ones(1,len-length(s)),s]; end
    s = [' ',s];
    for j=0:n,
      element = a(i,col+j);
      if element==0,
        s=[s,'            0'];
      elseif (element>=1.e6)|(element<=-1.e5)|(abs(element)<.0001)
        s=[s,sprintf(' %12.5e',element)];
      else
        s=[s,sprintf(' %12.5f',element)];
      end
    end
    disp(s)
  end % for
  col = col+col_per_scrn;
  disp(' ')
  if (ncols-col<n), n=ncols-col; end
end % while

