function [cmap, warnstr] = pr_getcmap(acmapname)
% get colormap of name acmapname
% FORMAT [cmap, warnstr] = pr_getcmap(acmapname)
% 
% Inputs
% acmapname   - string.  Can be (in order of precedence)
%               - matrix name in base workspace
%               - colour name; one of 'red','green','blue','cyan',
%                 'magenta', 'yellow', 'black', 'white'
%               - filename of .mat or .lut file.  If filename has no
%                 extension, assumes '.mat' extension
%
% Outputs
% cmap        - Nx3 colormap matrix
%               or empty if fails
% warnstr     - warning message if fails
% 
% $Id: pr_getcmap.m,v 1.1 2005/04/20 15:05:00 matthewbrett Exp $

cmap = []; warnstr = [];  
if nargin < 1
  acmapname = '';
end
if isempty(acmapname)
  warnstr = 'No colormap name passed';
  return
end
% try a matrix first
cmap = evalin('base',acmapname,'[]');
if ~isempty(cmap)
  if size(cmap, 2)~=3
    warnstr = ['Colormap matrix ' acmapname ' was not N by 3'];
    cmap = [];
  end
  return
end
% not a matrix, is it...
% a colour name?
tmp = strcmpi(acmapname, {'red','green','blue','cyan', 'magenta', ...
            'yellow', 'black', 'white'});
coldefs = [1 0 0;
       0 1 0;
       0 0 1;
       0 1 1;
       1 0 1;
       1 1 0;
       0 0 0;
       1 1 1];

if any(tmp)
  coldef = coldefs(tmp, :);
  if ~any(diff(coldef))
    cmap = coldef;
  else
    cmap = (0:63)' * coldef / 63;
  end
  return
end
% is it a file?
oname = acmapname;
[p f e] = fileparts(acmapname);
% if no extension, add .mat
if isempty(e) 
  e = '.mat';
  acmapname = fullfile(p, [f e]);
end
ef = exist(acmapname, 'file');
% file doesn't exist? Try home directory of this mfile
if ~ef
  mfp = fileparts(which(mfilename));
  acmapname = fullfile(mfp, [f e]);
  ef = exist(acmapname, 'file');
end  
if ~ef
  warnstr = ['No matrix or file ''' oname ''''];
  return
end
% found file, get cmap
switch lower(e)
 case '.mat'
  % try for matrix of same name
  s = load(acmapname);
  if isfield(s, f)
    cmap = getfield(s, f);
  else % get first matrix in mat file
    s = struct2cell(s);
    cmap = s{1};
  end
  if size(cmap, 2)~=3
    warnstr = ['Colormap from ' acmapname ' was not an N by 3 matrix'];
    cmap = [];
  end
 case '.lut'
  fid = fopen(acmapname, 'rb');
  if fid~=-1
    cmap = fread(fid, Inf);
    l = length(cmap);
    if ~rem(l,3) 
      cmap = reshape(cmap, l/3, 3) / 255;
    else
      warnstr = ['LUT map ' acmapname ' was wrong size'];
    end
    fclose(fid);
  else
    warnstr = ['Cannot open LUT colormap file ' acmapname];
  end
 otherwise
  warnstr = ['Unrecognized file extension ' e ' for ' acmapname];
end
return
