%!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 --------------------------%