[comp.lang.postscript] A "switch" procedure

greid@adobe.com (Glenn Reid) (03/24/89)

Several people have asked me, over the years, how to do something like
a "case" or "switch") statement in PostScript.  Here is a procedure
that lets you get most of what you need out of the "switch" statement,
leaving complications like fall-through up to you.  I hope somebody
finds it useful.

Glenn Reid
Adobe Systems
Developer Tools & Strategies

%!PS-Adobe-2.1
%%Title: switch.ps
%%CreationDate: Thu Mar 23 13:18:36 1989
%%Creator: Glenn Reid, Adobe Systems
%%EndComments

% "switch" behaves sort of like the C "switch" language construct.
% It is up to the programmer to build "procs" to contain the
% various procedures that should be executed and the values to trigger
% them.  "fall-through" is similarly up to the programmer, as in the
% examples.
% The implementation is done with a dictionary of procedures, rather
% than attempting to use "ifelse".  It can be adapted not to pass the
% dictionary if only one is needed (but loses generality and nestability).

%   dictionary any "switch" -

/switch { %def
    2 copy known { %ifelse
	get exec
    }{ %else
	exch /default get exec	% leave unknown val on stack for "default"
    } ifelse
} bind def

/procs 12 dict begin
    0 { (zero found) == } def
    1 { (one found) == } def
    2 { %def
	(two found, and ) print
	procs 3 get exec		% falls through to 3
    } def
    3 { (three found) == } def
    4 3 load def			% 4 also falls through to 3
    /default { %def
	save exch 128 string cvs print restore
	(: not found in switch statement; default used.) =	
    } bind def
currentdict end def

%%EndProlog

procs 0 switch
procs 1 switch
procs 2 switch
procs 3 switch
procs 4 switch
procs 5 switch

%%Trailer