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