function imageext()
%IMAGEEXT	Demonstrate MATLAB V4's image capability.

%	Copyright (c) 1984-94 by The MathWorks, Inc.

if ~(exist('gatlin.mat')==2)
   disp('No images to display.');
   return
end
global IM_FIG;
if ~isempty(IM_FIG)
    h = get(0,'children');
    in = find(h == IM_FIG);
    if ~isempty(in)
       if strcmp(get(IM_FIG,'userdata'),'IMAGES')
     	   set(0,'CurrentFigure',IM_FIG);
	       return
       end
    end
end
global IM_NAMES
IM_NAMES = ['flujet  '
         'spine   '
         'gatlin  '
         'durer   '
         'detail  '
         'cape    '
         'clown   '
         'earth   '
         'mandrill'
         'spiral  '];
nimages = size(IM_NAMES,1);
image_button_labels = str2mat('NCSA Fluid Jet', ...
         'Human Spine', ...
         'Gatlinburg, 1964', ...
         'Durer Etching', ...
         'Durer Detail', ...
         'Cape Cod');
image_button_labels = str2mat(image_button_labels, ...
         'Clown', ...
         'Earth', ...
         'Mandrill', ...
         'Color Spiral');

color_button_labels = [ ...
         'hsv     ',
         'hot     ',
         'pink    ',
         'cool    ',
         'bone    ',
         'prism   ',
         'flag    ',
         'gray    ',
         'rand    ',
         'spin    ',
         'revert  '];
nil = size(image_button_labels,1);
nic = size(color_button_labels,1);
if nil > nic
	color_button_labels = str2mat(color_button_labels,'Close');
	nic = nic + 1;
	where_close = 'color';
else
	image_button_labels = str2mat(image_button_labels,'Close');
	nil = nil + 1;
	where_close = 'image';
end
maxbut = max(nil,nic);
IM_FIG = figure('units','normal','position',[.13 .33 .65 .6],'visible','off');
set(IM_FIG,'userdata','IMAGES');
revert = get(IM_FIG,'colormap');

% place image menu buttons on left side
toti = 1.5*nil+.5;
but_h = .8/nil;
widi = 0.2;
hi = [];
for k = 1:nil
   pos = [0.01 (1.5*(k-1)+.25)/toti widi but_h];
   hi = [uicontrol(IM_FIG,'units','normal','pos',pos) ; hi];
end

% place color menu buttons on right side
totc = 1.5*nic+.5;
widc = 0.08;
hc = [];
for k = 1:nic
   pos = [0.99-widc (1.5*(k-1)+.25)/totc widc but_h];
   hc = [uicontrol(IM_FIG,'units','normal','pos',pos) ; hc];
end

if strcmp(where_close,'image')
   hcl = hi(length(hi));
   hi = hi(1:length(hi)-1);
   image_button_labels(nil,:) = [];
   nil = nil-1;
else
   hcl = hc(length(hc));
   hc = hc(1:length(hc)-1);
   color_button_labels(nic,:) = [];
   nic = nic-1;
end

% set close callback
s = ['global IM_FIG;close(IM_FIG),clear global IM_FIG IM_NAMES IM_AXIS;'];
s = [s 'clear IM_AXIS IM_FIG IM_NAMES;'];
if strcmp(where_close,'image')
   set(hcl,'string',' Close','horiz','left','callback',s);
else
   set(hcl,'string',' close','horiz','center','callback',s);
end
for k=1:nic
    col = color_button_labels(k,:);
    col(col==' ') = [];
    coll = col;
    if strcmp(col,'rand'),col='rand(size(get(gcf,''''colormap''''),1),3)'; end
    if strcmp(col,'spin')
        s = ['global IM_FIG,cf=gcf;set(0,''CurrentFigure'',IM_FIG),',...
            'point = get(IM_FIG,''pointer'');',...
            'set(IM_FIG,''pointer'',''watch'');drawnow;',...
            'spinmap;set(IM_FIG,''pointer'',point);'];
    else
       s = ['global IM_FIG, cmap = ''',col,''';',...
            'cf=gcf;set(0,''CurrentFigure'',IM_FIG);',...
            'point = get(IM_FIG,''pointer'');',...
            'set(IM_FIG,''pointer'',''watch'');drawnow;',...
            'cmap(cmap=='' '')=[];eval([''cm='' cmap '';'']);',...
            'set(IM_FIG, ''mincolormap'',size(cm,1),''colormap'',cm);',...
            'set(IM_FIG,''pointer'',point);',...
            'if cf~=IM_FIG,set(0,''CurrentFigure'',cf),end;'];
    end
    set(hc(k),'string',coll,'horiz','center','callback',s);
end
for k = 1:nil-1
    s = ['global IM_AXIS IM_FIG IM_NAMES IM_CAPT;cf=gcf;',...
        'set(0,''currentfigure'',IM_FIG);',...
        'set(IM_FIG,''CurrentAxes'',IM_AXIS);',...
        'cla; drawnow;',...
        'point = get(IM_FIG,''pointer'');',...
        'set(IM_FIG,''pointer'',''watch'');drawnow;',...
        'file = ''',IM_NAMES(k,:),''';file(file == '' '') = [];',...
        'load(file);',...
        '[m,n] = size(X); image(X);axis off;A = [n/m 1];',...
        'set(IM_AXIS,''aspect'',eval(''A''));',...
        'set(IM_FIG,''mincolormap'',size(map,1),''colormap'',map);',...
        'IM_CAPT = imtext(.5,-.08,caption);',...
        'revert = map;' ...
        'set(IM_FIG,''pointer'',point);',...
        'drawnow,if cf~=IM_FIG,set(0,''CurrentFigure'',cf),end,'];
    set(hi(k),'string',[' ',deblank(image_button_labels(k,:))],'horiz','left','callback',s);
end

% now do color spiral
s = ['global IM_AXIS IM_FIG IM_NAMES;cf=gcf;set(0,''currentfigure'',IM_FIG);',...
    'point = get(IM_FIG,''pointer'');set(IM_FIG,''pointer'',''watch'');',...
    'drawnow,set(IM_FIG,''CurrentAxes'',IM_AXIS);',...
    'm = 16; X = [spiral(m)-1 zeros(m,1); zeros(1,m+1)]; pcolor(X);',...
    'map = hsv; set(IM_FIG,''mincolormap'',size(map,1),''colormap'',map);',...
    'revert = map; drawnow,set(IM_FIG,''pointer'',point);',...
    'if cf~=IM_FIG,set(0,''CurrentFigure'',cf),end,'];
set(hi(nil),'string',[' ',deblank(image_button_labels(nil,:))],'horiz','left','callback',s);

% set default axes location
global IM_AXIS;
IM_AXIS = axes('pos',[1.2*(0.01+widi) .11 .9*(.98-widi-widc) .81]);
axis off
rect = [.25 .95 .5 .04];
uicontrol(IM_FIG,'style','text','units','normal','position',rect,'string',...
         'Images and Color Maps','backgroundcolor',get(gcf,'color'), ...
         'clipping','off', 'foregroundcolor', get(IM_AXIS,'xcolor'));
set(IM_FIG,'visible','on')
