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

    grestore	% restore graphics state


   cleartomark					%% clearing operand stack

end		%% pops mainDict from dictionary stack

showpage

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