%!IBM Personal Pageprinter (4216) Adapter Program V1.0
%%DocumentFonts: Times-Roman
%%Creator: Axiom
%%CreationDate: today
%%Pages: 1
%%processing (hard) limit: 250 pts or 500 values for the operand stack.
%%EndComments

%------------------------------- prologue -------------------------------%
%-------------------------- support procedures --------------------------%

%--------- first create user dictionary with 100 entries max ------------%
%          (number can be changed to accomodate definitions)             %

100	dict	begin		%% using 100 entries in top level dictionary

/FontHeight     12 def

/inch
        {       72 mul }
        def

% yVal and hVal are necessary because the Xwindow display origin
% is at the upper left corner, while the postscript display
% origin is at the lower left hand corner.

/yVal		%% get Y value -- make upper left corner origin
        {       maxY sub abs }	%% maxY is viewWindow height
        def

/hVal		%% get H value -- used for displaying title text
        {       maxH sub abs }	%% maxH is viewWindow height+titleWindow height
        def

% loads in the font

/loadFont
        {       /Times-Roman findfont FontHeight scalefont setfont }
        def

% draws a rectangle with input operand: 
%		height
%		width
% notice that this function does not "draw" or ink the rectangle.
/drawRect
	{	1 index 1 add 0 rlineto		%% draw first side
                0 exch 1 add neg rlineto	%% draw second side
                1 add neg 0 rlineto		%% draw third side
                closepath }			%% draw fourth side
        def

% create a rectangle with input operand in the view window: 
%		y
%		x
%		height
%		width
% notice that this function does not "draw" or ink the rectangle.
/rectangle
        {       yVal moveto			%% set currentpoint for line
		drawRect }			%% draws the rectangle
        def

% These are global variables that every draw procedure uses
% THe operand should be as follows:
%		viewWindow width
%		viewWindow height
%		title height
/setDim
        {       /maxX exch def			%% width of display
                /maxY exch def			%% height of display
		/titleH exch def		%% height of title
		/maxH maxY titleH add def	%% height of display + title
        } def

%-------------------------- major procedures --------------------------%

/title		%% draws a rectangle around the title of picture
	{	gsave
		newpath
		moveto				%% lower left of title
                titleH 1 add 0 exch rlineto	%% draw first side
                1 add 0 rlineto			%% draw second side
                1 add neg 0 exch rlineto
		begin installGC stroke end	%% draw third side
		grestore }
	def

/drawFrame      %% draw display frame
        {	gsave
                newpath
                maxX maxY 0 0 rectangle
		begin installGC stroke end
                grestore }
        def

% updates the foreground color of existing graphics-context dictionary:
%		foreground color
%		dictionary name
/setForeground
	{	/FGcolor exch put }
	def

% updates the background color of existing graphics-context dictionary:
%		background color
%		dictionary name
/setBackground
	{	/BGcolor exch put }
	def

% updates the line width, line style, cap style, join style of
% existing graphics-context dictionary:
%		dictionary name
%		join style
%		cap style
%		line width
/setLineAttributes
	{	begin
		/JoinStyle exch def
		/CapStyle  exch def
		/LineWidth exch def
		end }
	def

% creates a graphics context dictionary with the following information:
%		/dictionary name
%		foreground color
%		background color
%		line width
%		cap style
%		join style
% this creates different graphical contexts for different drawing functions.
/makeDict
	{	5 dict 2 copy def begin	pop %% with dict name on top of stack
		/FGcolor   exch def	%% define drawing attributes
		/BGcolor   exch def	%% not heavily used
		/LineWidth exch def
		/CapStyle  exch def
		/JoinStyle exch def
		end }
	def

% makes the current dictionary attributes effective
% this function takes the values in the current dictionary to set the context
% these are the values currently being used: foreground, cap, join, and width
/installGC
	{
		FGcolor currentgray ne
		{FGcolor setgray} if		%% foreground color
		CapStyle currentlinecap ne
		{CapStyle setlinecap} if	%% cap style
		JoinStyle currentlinejoin ne
		{JoinStyle setlinejoin} if	%% join style
		LineWidth currentlinewidth ne
		{LineWidth setlinewidth} if }	%% line width
	def

% operand stack configuration in order to use psDrawLine:
%		psDrawLine
%		y0
%		x0
%		y1
%		x1
%		graphics-context dictionary
% this draws a line from (x0, y0) to (x1, y1).

/psDrawLine
        {	gsave
                newpath
                yVal moveto
                yVal lineto
		begin installGC stroke end
		grestore }
        def

% operand stack configuration in order to use psFillArc:
%		psFillArc
%		y center of rectangle
%		x center of rectangle
%		angle2
%		angle1
%		width
%		height
%		y
%		x
%		graphics-context dictionary
% this draws and fills an arc whose origin is at x, y, and whose width
% and height specifies the rectangle which encases the arc.
% Origin is at upper left corner of rectangle.
% This function uses "scale" to make cricles and ellipses.
/psFillArc
        {	gsave
                newpath
		yVal moveto
                /sfactor 4 index 4 index div def
                1 sfactor scale
                6 5 roll			%%	 x on top of stack
                3 index 2 div add               %% define x origin
                6 5 roll			%%	 y on top of stack
                6 5 roll			%%	 h on top of stack
                2 div add yVal sfactor div      %% define y origin
                5 4 roll			%%	 w on top of stack
                2 div                           %% define radius
                5 3 roll			%%	 a1 a2 now on top
                1 index add
                arcn                            %% draw clockwise arc
                begin installGC fill end	%% fills with foreground color
                grestore }
        def

%-------------------------- script --------------------------%

% 1 inch 1 inch translate

   mark					%% mark bottom of our stack

	0	0	1
	1072693248	0	/globalGC1	makeDict
	0	0	1
	1072693248	0	/globalGC2	makeDict
	0	0	1
	1072693248	0	/trashGC	makeDict
	0	0	1
	1072693248	0	/globGC	makeDict
	0	0	1
	1072693248	0	/anotherGC	makeDict
	0	0	1
	1072693248	0	/graphGC	makeDict
	0	0	1
	1072693248	0	/unitGC	makeDict

    gsave	% save graphics state for clipping path

	24	259	256	setDim
	maxX maxY	0 0	rectangle	clip	% set clip path

	globalGC1	256	129	0	129	psDrawLine
	globalGC1	127	259	127	0	psDrawLine
	globalGC1	11 128	3 3	0 360	12 129	psFillArc
	globalGC1	12	129	12	129	psDrawLine
	globalGC1	11 128	3 3	0 360	12 129	psFillArc
	globalGC1	17	144	12	129	psDrawLine
	globalGC1	16 143	3 3	0 360	17 144	psFillArc
	globalGC1	22	159	17	144	psDrawLine
	globalGC1	21 158	3 3	0 360	22 159	psFillArc
	globalGC1	27	173	22	159	psDrawLine
	globalGC1	26 172	3 3	0 360	27 173	psFillArc
	globalGC1	32	187	27	173	psDrawLine
	globalGC1	31 186	3 3	0 360	32 187	psFillArc
	globalGC1	36	199	32	187	psDrawLine
	globalGC1	35 198	3 3	0 360	36 199	psFillArc
	globalGC1	41	210	36	199	psDrawLine
	globalGC1	40 209	3 3	0 360	41 210	psFillArc
	globalGC1	46	220	41	210	psDrawLine
	globalGC1	45 219	3 3	0 360	46 220	psFillArc
	globalGC1	51	229	46	220	psDrawLine
	globalGC1	50 228	3 3	0 360	51 229	psFillArc
	globalGC1	56	235	51	229	psDrawLine
	globalGC1	55 234	3 3	0 360	56 235	psFillArc
	globalGC1	60	240	56	235	psDrawLine
	globalGC1	59 239	3 3	0 360	60 240	psFillArc
	globalGC1	63	242	60	240	psDrawLine
	globalGC1	62 241	3 3	0 360	63 242	psFillArc
	globalGC1	65	243	63	242	psDrawLine
	globalGC1	64 242	3 3	0 360	65 243	psFillArc
	globalGC1	68	244	65	243	psDrawLine
	globalGC1	67 243	3 3	0 360	68 244	psFillArc
	globalGC1	70	244	68	244	psDrawLine
	globalGC1	69 243	3 3	0 360	70 244	psFillArc
	globalGC1	72	244	70	244	psDrawLine
	globalGC1	71 243	3 3	0 360	72 244	psFillArc
	globalGC1	75	243	72	244	psDrawLine
	globalGC1	74 242	3 3	0 360	75 243	psFillArc
	globalGC1	77	242	75	243	psDrawLine
	globalGC1	76 241	3 3	0 360	77 242	psFillArc
	globalGC1	80	240	77	242	psDrawLine
	globalGC1	79 239	3 3	0 360	80 240	psFillArc
	globalGC1	84	235	80	240	psDrawLine
	globalGC1	83 234	3 3	0 360	84 235	psFillArc
	globalGC1	89	229	84	235	psDrawLine
	globalGC1	88 228	3 3	0 360	89 229	psFillArc
	globalGC1	94	220	89	229	psDrawLine
	globalGC1	93 219	3 3	0 360	94 220	psFillArc
	globalGC1	99	210	94	220	psDrawLine
	globalGC1	98 209	3 3	0 360	99 210	psFillArc
	globalGC1	104	199	99	210	psDrawLine
	globalGC1	103 198	3 3	0 360	104 199	psFillArc
	globalGC1	108	187	104	199	psDrawLine
	globalGC1	107 186	3 3	0 360	108 187	psFillArc
	globalGC1	113	173	108	187	psDrawLine
	globalGC1	112 172	3 3	0 360	113 173	psFillArc
	globalGC1	118	159	113	173	psDrawLine
	globalGC1	117 158	3 3	0 360	118 159	psFillArc
	globalGC1	123	144	118	159	psDrawLine
	globalGC1	122 143	3 3	0 360	123 144	psFillArc
	globalGC1	127	129	123	144	psDrawLine
	globalGC1	126 128	3 3	0 360	127 129	psFillArc
	globalGC1	132	114	127	129	psDrawLine
	globalGC1	131 113	3 3	0 360	132 114	psFillArc
	globalGC1	137	99	132	114	psDrawLine
	globalGC1	136 98	3 3	0 360	137 99	psFillArc
	globalGC1	142	85	137	99	psDrawLine
	globalGC1	141 84	3 3	0 360	142 85	psFillArc
	globalGC1	147	71	142	85	psDrawLine
	globalGC1	146 70	3 3	0 360	147 71	psFillArc
	globalGC1	151	59	147	71	psDrawLine
	globalGC1	150 58	3 3	0 360	151 59	psFillArc
	globalGC1	156	48	151	59	psDrawLine
	globalGC1	155 47	3 3	0 360	156 48	psFillArc
	globalGC1	161	38	156	48	psDrawLine
	globalGC1	160 37	3 3	0 360	161 38	psFillArc
	globalGC1	166	29	161	38	psDrawLine
	globalGC1	165 28	3 3	0 360	166 29	psFillArc
	globalGC1	171	23	166	29	psDrawLine
	globalGC1	170 22	3 3	0 360	171 23	psFillArc
	globalGC1	175	18	171	23	psDrawLine
	globalGC1	174 17	3 3	0 360	175 18	psFillArc
	globalGC1	178	16	175	18	psDrawLine
	globalGC1	177 15	3 3	0 360	178 16	psFillArc
	globalGC1	180	15	178	16	psDrawLine
	globalGC1	179 14	3 3	0 360	180 15	psFillArc
	globalGC1	183	14	180	15	psDrawLine
	globalGC1	182 13	3 3	0 360	183 14	psFillArc
	globalGC1	185	14	183	14	psDrawLine
	globalGC1	184 13	3 3	0 360	185 14	psFillArc
	globalGC1	187	14	185	14	psDrawLine
	globalGC1	186 13	3 3	0 360	187 14	psFillArc
	globalGC1	190	15	187	14	psDrawLine
	globalGC1	189 14	3 3	0 360	190 15	psFillArc
	globalGC1	192	16	190	15	psDrawLine
	globalGC1	191 15	3 3	0 360	192 16	psFillArc
	globalGC1	195	18	192	16	psDrawLine
	globalGC1	194 17	3 3	0 360	195 18	psFillArc
	globalGC1	199	23	195	18	psDrawLine
	globalGC1	198 22	3 3	0 360	199 23	psFillArc
	globalGC1	204	29	199	23	psDrawLine
	globalGC1	203 28	3 3	0 360	204 29	psFillArc
	globalGC1	209	38	204	29	psDrawLine
	globalGC1	208 37	3 3	0 360	209 38	psFillArc
	globalGC1	214	48	209	38	psDrawLine
	globalGC1	213 47	3 3	0 360	214 48	psFillArc
	globalGC1	219	59	214	48	psDrawLine
	globalGC1	218 58	3 3	0 360	219 59	psFillArc
	globalGC1	223	71	219	59	psDrawLine
	globalGC1	222 70	3 3	0 360	223 71	psFillArc
	globalGC1	228	85	223	71	psDrawLine
	globalGC1	227 84	3 3	0 360	228 85	psFillArc
	globalGC1	233	99	228	85	psDrawLine
	globalGC1	232 98	3 3	0 360	233 99	psFillArc
	globalGC1	238	114	233	99	psDrawLine
	globalGC1	237 113	3 3	0 360	238 114	psFillArc
	globalGC1	243	129	238	114	psDrawLine
	globalGC1	242 128	3 3	0 360	243 129	psFillArc

    grestore	% restore graphics state


   cleartomark					%% clearing operand stack

end		%% pops mainDict from dictionary stack

showpage

%-------------------------- end --------------------------%