Blame


1 13f7391e 2004-05-15 devnull %
2 13f7391e 2004-05-15 devnull % Dump a PostScript object, occasionally in a form that can be sent back
3 13f7391e 2004-05-15 devnull % through the interpreter. Similiar to Adobe's == procedure, but output
4 13f7391e 2004-05-15 devnull % is usually easier to read. No binding so operators like rcheck and exec
5 13f7391e 2004-05-15 devnull % can be conviently redefined.
6 13f7391e 2004-05-15 devnull %
7 13f7391e 2004-05-15 devnull
8 13f7391e 2004-05-15 devnull /GrabitDict 100 dict dup begin
9 13f7391e 2004-05-15 devnull
10 13f7391e 2004-05-15 devnull /recursive true def
11 13f7391e 2004-05-15 devnull /scratchstring 200 string def
12 13f7391e 2004-05-15 devnull /slowdown 100 def
13 13f7391e 2004-05-15 devnull
14 13f7391e 2004-05-15 devnull /column 0 def
15 13f7391e 2004-05-15 devnull /lastcolumn 80 def
16 13f7391e 2004-05-15 devnull /level 0 def
17 13f7391e 2004-05-15 devnull /multiline 100 array def
18 13f7391e 2004-05-15 devnull /nextname 0 def
19 13f7391e 2004-05-15 devnull /arraylength 0 def
20 13f7391e 2004-05-15 devnull /lengthonly false def
21 13f7391e 2004-05-15 devnull
22 13f7391e 2004-05-15 devnull /GrabitSetup {
23 13f7391e 2004-05-15 devnull counttomark {OmitNames exch true put} repeat pop
24 13f7391e 2004-05-15 devnull 0 0 moveto % for hardcopy output
25 13f7391e 2004-05-15 devnull } def
26 13f7391e 2004-05-15 devnull
27 13f7391e 2004-05-15 devnull /OmitNames 30 dict def % ignore these names
28 13f7391e 2004-05-15 devnull /OtherDicts 200 dict def % unrecognized dictionaries
29 13f7391e 2004-05-15 devnull
30 13f7391e 2004-05-15 devnull %
31 13f7391e 2004-05-15 devnull % All strings returned to the host go through Print. First pass through an
32 13f7391e 2004-05-15 devnull % array has lengthonly set to true.
33 13f7391e 2004-05-15 devnull %
34 13f7391e 2004-05-15 devnull
35 13f7391e 2004-05-15 devnull /Print {
36 13f7391e 2004-05-15 devnull dup type /stringtype ne {scratchstring cvs} if
37 13f7391e 2004-05-15 devnull lengthonly {
38 13f7391e 2004-05-15 devnull length arraylength add /arraylength exch def
39 13f7391e 2004-05-15 devnull }{
40 13f7391e 2004-05-15 devnull dup length column add /column exch def
41 13f7391e 2004-05-15 devnull print flush
42 13f7391e 2004-05-15 devnull slowdown {1 pop} repeat
43 13f7391e 2004-05-15 devnull } ifelse
44 13f7391e 2004-05-15 devnull } def
45 13f7391e 2004-05-15 devnull
46 13f7391e 2004-05-15 devnull /Indent {level {( ) Print} repeat} def
47 13f7391e 2004-05-15 devnull /Newline {(\n) Print lengthonly not {/column 0 def} if} def
48 13f7391e 2004-05-15 devnull
49 13f7391e 2004-05-15 devnull /NextLevel {/level level 1 add def multiline level 0 put} def
50 13f7391e 2004-05-15 devnull /LastLevel {/level level 1 sub def} def
51 13f7391e 2004-05-15 devnull
52 13f7391e 2004-05-15 devnull %
53 13f7391e 2004-05-15 devnull % Make a unique name for each unrecognized dictionary and remember the name
54 13f7391e 2004-05-15 devnull % and dictionary in OtherDicts.
55 13f7391e 2004-05-15 devnull %
56 13f7391e 2004-05-15 devnull
57 13f7391e 2004-05-15 devnull /Register {
58 13f7391e 2004-05-15 devnull dup type /dicttype eq {
59 13f7391e 2004-05-15 devnull /nextname nextname 1 add def
60 13f7391e 2004-05-15 devnull dup (UnknownDict ) dup
61 13f7391e 2004-05-15 devnull (UnknownDict) length nextname ( ) cvs putinterval
62 13f7391e 2004-05-15 devnull 0 (UnknownDict) length nextname ( ) cvs length add getinterval cvn
63 13f7391e 2004-05-15 devnull exch OtherDicts 3 1 roll put
64 13f7391e 2004-05-15 devnull } if
65 13f7391e 2004-05-15 devnull } def
66 13f7391e 2004-05-15 devnull
67 13f7391e 2004-05-15 devnull %
68 13f7391e 2004-05-15 devnull % Replace array or dictionary values by known names. Lookups are in the
69 13f7391e 2004-05-15 devnull % standard PostScript dictionaries and in OtherDicts. If found replace
70 13f7391e 2004-05-15 devnull % the value by the name and make it executable so nametype omits the
71 13f7391e 2004-05-15 devnull % leading /.
72 13f7391e 2004-05-15 devnull %
73 13f7391e 2004-05-15 devnull
74 13f7391e 2004-05-15 devnull /Replace {
75 13f7391e 2004-05-15 devnull false
76 13f7391e 2004-05-15 devnull 1 index type /dicttype eq {pop true} if
77 13f7391e 2004-05-15 devnull 1 index type /arraytype eq 2 index xcheck not and {pop true} if
78 13f7391e 2004-05-15 devnull {
79 13f7391e 2004-05-15 devnull false
80 13f7391e 2004-05-15 devnull [userdict systemdict statusdict serverdict OtherDicts] {
81 13f7391e 2004-05-15 devnull {
82 13f7391e 2004-05-15 devnull 3 index eq
83 13f7391e 2004-05-15 devnull {exch pop exch pop cvx true exit}
84 13f7391e 2004-05-15 devnull {pop}
85 13f7391e 2004-05-15 devnull ifelse
86 13f7391e 2004-05-15 devnull } forall
87 13f7391e 2004-05-15 devnull dup {exit} if
88 13f7391e 2004-05-15 devnull } forall
89 13f7391e 2004-05-15 devnull pop
90 13f7391e 2004-05-15 devnull } if
91 13f7391e 2004-05-15 devnull } def
92 13f7391e 2004-05-15 devnull
93 13f7391e 2004-05-15 devnull %
94 13f7391e 2004-05-15 devnull % Simple type handlers. In some cases (e.g. savetype) what's returned can't
95 13f7391e 2004-05-15 devnull % be sent back through the interpreter.
96 13f7391e 2004-05-15 devnull %
97 13f7391e 2004-05-15 devnull
98 13f7391e 2004-05-15 devnull /booleantype {{(true )}{(false )} ifelse Print} def
99 13f7391e 2004-05-15 devnull /marktype {pop (mark ) Print} def
100 13f7391e 2004-05-15 devnull /nulltype {pop (null ) Print} def
101 13f7391e 2004-05-15 devnull /integertype {Print ( ) Print} def
102 13f7391e 2004-05-15 devnull /realtype {Print ( ) Print} def
103 13f7391e 2004-05-15 devnull /filetype {pop (-file- ) Print} def
104 13f7391e 2004-05-15 devnull /fonttype {pop (-fontID- ) Print} def
105 13f7391e 2004-05-15 devnull /savetype {pop (-saveobj- ) Print} def
106 13f7391e 2004-05-15 devnull
107 13f7391e 2004-05-15 devnull %
108 13f7391e 2004-05-15 devnull % Special formatting for operators is enabled if the flag in multiline
109 13f7391e 2004-05-15 devnull % (for the current level) is set to 1. In that case each operator, after
110 13f7391e 2004-05-15 devnull % being printed, is looked up in OperatorDict. If found the value is used
111 13f7391e 2004-05-15 devnull % as an index into the OperatorProcs array and the object at that index
112 13f7391e 2004-05-15 devnull % is retrieved and executed. Currently only used to choose the operators
113 13f7391e 2004-05-15 devnull % that end a line.
114 13f7391e 2004-05-15 devnull %
115 13f7391e 2004-05-15 devnull
116 13f7391e 2004-05-15 devnull /operatortype {
117 13f7391e 2004-05-15 devnull dup Print ( ) Print
118 13f7391e 2004-05-15 devnull multiline level get 1 eq {
119 13f7391e 2004-05-15 devnull scratchstring cvs cvn dup OperatorDict exch known {
120 13f7391e 2004-05-15 devnull OperatorDict exch get
121 13f7391e 2004-05-15 devnull OperatorProcs exch get exec
122 13f7391e 2004-05-15 devnull }{
123 13f7391e 2004-05-15 devnull pop
124 13f7391e 2004-05-15 devnull column lastcolumn gt {Newline Indent} if
125 13f7391e 2004-05-15 devnull } ifelse
126 13f7391e 2004-05-15 devnull }{pop} ifelse
127 13f7391e 2004-05-15 devnull } def
128 13f7391e 2004-05-15 devnull
129 13f7391e 2004-05-15 devnull %
130 13f7391e 2004-05-15 devnull % Executable names are passed to operatortype. Non-executable names get a
131 13f7391e 2004-05-15 devnull % leading /.
132 13f7391e 2004-05-15 devnull %
133 13f7391e 2004-05-15 devnull
134 13f7391e 2004-05-15 devnull /nametype {
135 13f7391e 2004-05-15 devnull dup xcheck {
136 13f7391e 2004-05-15 devnull operatortype
137 13f7391e 2004-05-15 devnull }{
138 13f7391e 2004-05-15 devnull (/) Print Print ( ) Print
139 13f7391e 2004-05-15 devnull } ifelse
140 13f7391e 2004-05-15 devnull } def
141 13f7391e 2004-05-15 devnull
142 13f7391e 2004-05-15 devnull %
143 13f7391e 2004-05-15 devnull % Arrays are processed in two passes. The first computes the length of the
144 13f7391e 2004-05-15 devnull % string returned to the host without any special formatting. If it extends
145 13f7391e 2004-05-15 devnull % past the last column special formatting is enabled by setting a flag in
146 13f7391e 2004-05-15 devnull % array multiline. Arrays are processed in a for loop so the last element
147 13f7391e 2004-05-15 devnull % easily recognized. At that point special fortmatting is disabled.
148 13f7391e 2004-05-15 devnull %
149 13f7391e 2004-05-15 devnull
150 13f7391e 2004-05-15 devnull /packedarraytype {arraytype} def
151 13f7391e 2004-05-15 devnull
152 13f7391e 2004-05-15 devnull /arraytype {
153 13f7391e 2004-05-15 devnull NextLevel
154 13f7391e 2004-05-15 devnull lengthonly not {
155 13f7391e 2004-05-15 devnull /lengthonly true def
156 13f7391e 2004-05-15 devnull /arraylength 0 def
157 13f7391e 2004-05-15 devnull dup dup type exec
158 13f7391e 2004-05-15 devnull arraylength 20 gt arraylength column add lastcolumn gt and {
159 13f7391e 2004-05-15 devnull multiline level 1 put
160 13f7391e 2004-05-15 devnull } if
161 13f7391e 2004-05-15 devnull /lengthonly false def
162 13f7391e 2004-05-15 devnull } if
163 13f7391e 2004-05-15 devnull
164 13f7391e 2004-05-15 devnull dup rcheck not {
165 13f7391e 2004-05-15 devnull (-array- ) Print pop
166 13f7391e 2004-05-15 devnull }{
167 13f7391e 2004-05-15 devnull dup xcheck {({)}{([)} ifelse Print
168 13f7391e 2004-05-15 devnull multiline level get 0 ne {Newline Indent}{( ) Print} ifelse
169 13f7391e 2004-05-15 devnull 0 1 2 index length 1 sub {
170 13f7391e 2004-05-15 devnull 2 copy exch length 1 sub eq multiline level get 1 eq and {
171 13f7391e 2004-05-15 devnull multiline level 2 put
172 13f7391e 2004-05-15 devnull } if
173 13f7391e 2004-05-15 devnull 2 copy get exch pop
174 13f7391e 2004-05-15 devnull dup type /dicttype eq {
175 13f7391e 2004-05-15 devnull Replace
176 13f7391e 2004-05-15 devnull dup type /dicttype eq {
177 13f7391e 2004-05-15 devnull dup Register Replace
178 13f7391e 2004-05-15 devnull recursive {
179 13f7391e 2004-05-15 devnull 2 copy cvlit
180 13f7391e 2004-05-15 devnull /def load 3 1 roll
181 13f7391e 2004-05-15 devnull count 3 roll
182 13f7391e 2004-05-15 devnull } if
183 13f7391e 2004-05-15 devnull exch pop
184 13f7391e 2004-05-15 devnull } if
185 13f7391e 2004-05-15 devnull } if
186 13f7391e 2004-05-15 devnull dup type exec
187 13f7391e 2004-05-15 devnull dup xcheck not multiline level get 1 eq and {
188 13f7391e 2004-05-15 devnull 0 index type /arraytype eq
189 13f7391e 2004-05-15 devnull 1 index type /packedarray eq or
190 13f7391e 2004-05-15 devnull 1 index type /stringtype eq or {Newline Indent} if
191 13f7391e 2004-05-15 devnull } if
192 13f7391e 2004-05-15 devnull } for
193 13f7391e 2004-05-15 devnull multiline level get 0 ne {Newline LastLevel Indent NextLevel} if
194 13f7391e 2004-05-15 devnull xcheck {(} )}{(] )} ifelse Print
195 13f7391e 2004-05-15 devnull } ifelse
196 13f7391e 2004-05-15 devnull LastLevel
197 13f7391e 2004-05-15 devnull } def
198 13f7391e 2004-05-15 devnull
199 13f7391e 2004-05-15 devnull %
200 13f7391e 2004-05-15 devnull % Dictionary handler. Try to replace the value by a name before processing
201 13f7391e 2004-05-15 devnull % the dictionary.
202 13f7391e 2004-05-15 devnull %
203 13f7391e 2004-05-15 devnull
204 13f7391e 2004-05-15 devnull /dicttype {
205 13f7391e 2004-05-15 devnull dup
206 13f7391e 2004-05-15 devnull rcheck not {
207 13f7391e 2004-05-15 devnull (-dictionary- ) Print pop
208 13f7391e 2004-05-15 devnull }{
209 13f7391e 2004-05-15 devnull dup maxlength Print ( dict dup begin) Print Newline
210 13f7391e 2004-05-15 devnull NextLevel
211 13f7391e 2004-05-15 devnull {
212 13f7391e 2004-05-15 devnull 1 index OmitNames exch known {
213 13f7391e 2004-05-15 devnull pop pop
214 13f7391e 2004-05-15 devnull }{
215 13f7391e 2004-05-15 devnull Indent
216 13f7391e 2004-05-15 devnull Replace % arrays and dicts by known names
217 13f7391e 2004-05-15 devnull Register % new dictionaries in OtherDicts
218 13f7391e 2004-05-15 devnull exch
219 13f7391e 2004-05-15 devnull cvlit dup type exec % key first - force a /
220 13f7391e 2004-05-15 devnull dup type exec % then the value
221 13f7391e 2004-05-15 devnull (def) Print Newline
222 13f7391e 2004-05-15 devnull } ifelse
223 13f7391e 2004-05-15 devnull } forall
224 13f7391e 2004-05-15 devnull LastLevel
225 13f7391e 2004-05-15 devnull Indent
226 13f7391e 2004-05-15 devnull (end ) Print
227 13f7391e 2004-05-15 devnull } ifelse
228 13f7391e 2004-05-15 devnull } def
229 13f7391e 2004-05-15 devnull
230 13f7391e 2004-05-15 devnull %
231 13f7391e 2004-05-15 devnull % Strings containing characters not in AsciiDict are returned in hex. All
232 13f7391e 2004-05-15 devnull % others are ASCII strings and use AsciiDict for character mapping.
233 13f7391e 2004-05-15 devnull %
234 13f7391e 2004-05-15 devnull
235 13f7391e 2004-05-15 devnull /onecharstring ( ) def
236 13f7391e 2004-05-15 devnull /twocharstring ( ) def
237 13f7391e 2004-05-15 devnull
238 13f7391e 2004-05-15 devnull /stringtype {
239 13f7391e 2004-05-15 devnull dup
240 13f7391e 2004-05-15 devnull rcheck not {
241 13f7391e 2004-05-15 devnull (-string- ) Print
242 13f7391e 2004-05-15 devnull }{
243 13f7391e 2004-05-15 devnull /hexit false def
244 13f7391e 2004-05-15 devnull dup {
245 13f7391e 2004-05-15 devnull onecharstring 0 3 -1 roll put
246 13f7391e 2004-05-15 devnull AsciiDict onecharstring cvn known not {
247 13f7391e 2004-05-15 devnull /hexit true def exit
248 13f7391e 2004-05-15 devnull } if
249 13f7391e 2004-05-15 devnull } forall
250 13f7391e 2004-05-15 devnull
251 13f7391e 2004-05-15 devnull hexit {(<)}{(\()} ifelse Print
252 13f7391e 2004-05-15 devnull 0 1 2 index length 1 sub {
253 13f7391e 2004-05-15 devnull 2 copy 1 getinterval exch pop
254 13f7391e 2004-05-15 devnull hexit {
255 13f7391e 2004-05-15 devnull 0 get /n exch def
256 13f7391e 2004-05-15 devnull n -4 bitshift 16#F and 16 twocharstring cvrs pop
257 13f7391e 2004-05-15 devnull n 16#F and twocharstring 1 1 getinterval 16 exch cvrs pop
258 13f7391e 2004-05-15 devnull twocharstring
259 13f7391e 2004-05-15 devnull }{cvn AsciiDict exch get} ifelse
260 13f7391e 2004-05-15 devnull Print
261 13f7391e 2004-05-15 devnull column lastcolumn gt {
262 13f7391e 2004-05-15 devnull hexit not {(\\) Print} if
263 13f7391e 2004-05-15 devnull Newline
264 13f7391e 2004-05-15 devnull } if
265 13f7391e 2004-05-15 devnull } for
266 13f7391e 2004-05-15 devnull hexit {(> )}{(\) )} ifelse Print
267 13f7391e 2004-05-15 devnull } ifelse
268 13f7391e 2004-05-15 devnull pop
269 13f7391e 2004-05-15 devnull } def
270 13f7391e 2004-05-15 devnull
271 13f7391e 2004-05-15 devnull %
272 13f7391e 2004-05-15 devnull % ASCII characters and replacement strings. Ensures the returned string will
273 13f7391e 2004-05-15 devnull % reproduce the original when passed through the scanner. Strings containing
274 13f7391e 2004-05-15 devnull % characters not in this list should be returned as hex strings.
275 13f7391e 2004-05-15 devnull %
276 13f7391e 2004-05-15 devnull
277 13f7391e 2004-05-15 devnull /AsciiDict 128 dict dup begin
278 13f7391e 2004-05-15 devnull (\n) cvn (\\n) def
279 13f7391e 2004-05-15 devnull (\r) cvn (\\r) def
280 13f7391e 2004-05-15 devnull (\t) cvn (\\t) def
281 13f7391e 2004-05-15 devnull (\b) cvn (\\b) def
282 13f7391e 2004-05-15 devnull (\f) cvn (\\f) def
283 13f7391e 2004-05-15 devnull ( ) cvn ( ) def
284 13f7391e 2004-05-15 devnull (!) cvn (!) def
285 13f7391e 2004-05-15 devnull (") cvn (") def
286 13f7391e 2004-05-15 devnull (#) cvn (#) def
287 13f7391e 2004-05-15 devnull ($) cvn ($) def
288 13f7391e 2004-05-15 devnull (%) cvn (\\%) def
289 13f7391e 2004-05-15 devnull (&) cvn (&) def
290 13f7391e 2004-05-15 devnull (') cvn (') def
291 13f7391e 2004-05-15 devnull (\() cvn (\\\() def
292 13f7391e 2004-05-15 devnull (\)) cvn (\\\)) def
293 13f7391e 2004-05-15 devnull (*) cvn (*) def
294 13f7391e 2004-05-15 devnull (+) cvn (+) def
295 13f7391e 2004-05-15 devnull (,) cvn (,) def
296 13f7391e 2004-05-15 devnull (-) cvn (-) def
297 13f7391e 2004-05-15 devnull (.) cvn (.) def
298 13f7391e 2004-05-15 devnull (/) cvn (/) def
299 13f7391e 2004-05-15 devnull (0) cvn (0) def
300 13f7391e 2004-05-15 devnull (1) cvn (1) def
301 13f7391e 2004-05-15 devnull (2) cvn (2) def
302 13f7391e 2004-05-15 devnull (3) cvn (3) def
303 13f7391e 2004-05-15 devnull (4) cvn (4) def
304 13f7391e 2004-05-15 devnull (5) cvn (5) def
305 13f7391e 2004-05-15 devnull (6) cvn (6) def
306 13f7391e 2004-05-15 devnull (7) cvn (7) def
307 13f7391e 2004-05-15 devnull (8) cvn (8) def
308 13f7391e 2004-05-15 devnull (9) cvn (9) def
309 13f7391e 2004-05-15 devnull (:) cvn (:) def
310 13f7391e 2004-05-15 devnull (;) cvn (;) def
311 13f7391e 2004-05-15 devnull (<) cvn (<) def
312 13f7391e 2004-05-15 devnull (=) cvn (=) def
313 13f7391e 2004-05-15 devnull (>) cvn (>) def
314 13f7391e 2004-05-15 devnull (?) cvn (?) def
315 13f7391e 2004-05-15 devnull (@) cvn (@) def
316 13f7391e 2004-05-15 devnull (A) cvn (A) def
317 13f7391e 2004-05-15 devnull (B) cvn (B) def
318 13f7391e 2004-05-15 devnull (C) cvn (C) def
319 13f7391e 2004-05-15 devnull (D) cvn (D) def
320 13f7391e 2004-05-15 devnull (E) cvn (E) def
321 13f7391e 2004-05-15 devnull (F) cvn (F) def
322 13f7391e 2004-05-15 devnull (G) cvn (G) def
323 13f7391e 2004-05-15 devnull (H) cvn (H) def
324 13f7391e 2004-05-15 devnull (I) cvn (I) def
325 13f7391e 2004-05-15 devnull (J) cvn (J) def
326 13f7391e 2004-05-15 devnull (K) cvn (K) def
327 13f7391e 2004-05-15 devnull (L) cvn (L) def
328 13f7391e 2004-05-15 devnull (M) cvn (M) def
329 13f7391e 2004-05-15 devnull (N) cvn (N) def
330 13f7391e 2004-05-15 devnull (O) cvn (O) def
331 13f7391e 2004-05-15 devnull (P) cvn (P) def
332 13f7391e 2004-05-15 devnull (Q) cvn (Q) def
333 13f7391e 2004-05-15 devnull (R) cvn (R) def
334 13f7391e 2004-05-15 devnull (S) cvn (S) def
335 13f7391e 2004-05-15 devnull (T) cvn (T) def
336 13f7391e 2004-05-15 devnull (U) cvn (U) def
337 13f7391e 2004-05-15 devnull (V) cvn (V) def
338 13f7391e 2004-05-15 devnull (W) cvn (W) def
339 13f7391e 2004-05-15 devnull (X) cvn (X) def
340 13f7391e 2004-05-15 devnull (Y) cvn (Y) def
341 13f7391e 2004-05-15 devnull (Z) cvn (Z) def
342 13f7391e 2004-05-15 devnull ([) cvn ([) def
343 13f7391e 2004-05-15 devnull (\\) cvn (\\\\) def
344 13f7391e 2004-05-15 devnull (]) cvn (]) def
345 13f7391e 2004-05-15 devnull (^) cvn (^) def
346 13f7391e 2004-05-15 devnull (_) cvn (_) def
347 13f7391e 2004-05-15 devnull (`) cvn (`) def
348 13f7391e 2004-05-15 devnull (a) cvn (a) def
349 13f7391e 2004-05-15 devnull (b) cvn (b) def
350 13f7391e 2004-05-15 devnull (c) cvn (c) def
351 13f7391e 2004-05-15 devnull (d) cvn (d) def
352 13f7391e 2004-05-15 devnull (e) cvn (e) def
353 13f7391e 2004-05-15 devnull (f) cvn (f) def
354 13f7391e 2004-05-15 devnull (g) cvn (g) def
355 13f7391e 2004-05-15 devnull (h) cvn (h) def
356 13f7391e 2004-05-15 devnull (i) cvn (i) def
357 13f7391e 2004-05-15 devnull (j) cvn (j) def
358 13f7391e 2004-05-15 devnull (k) cvn (k) def
359 13f7391e 2004-05-15 devnull (l) cvn (l) def
360 13f7391e 2004-05-15 devnull (m) cvn (m) def
361 13f7391e 2004-05-15 devnull (n) cvn (n) def
362 13f7391e 2004-05-15 devnull (o) cvn (o) def
363 13f7391e 2004-05-15 devnull (p) cvn (p) def
364 13f7391e 2004-05-15 devnull (q) cvn (q) def
365 13f7391e 2004-05-15 devnull (r) cvn (r) def
366 13f7391e 2004-05-15 devnull (s) cvn (s) def
367 13f7391e 2004-05-15 devnull (t) cvn (t) def
368 13f7391e 2004-05-15 devnull (u) cvn (u) def
369 13f7391e 2004-05-15 devnull (v) cvn (v) def
370 13f7391e 2004-05-15 devnull (w) cvn (w) def
371 13f7391e 2004-05-15 devnull (x) cvn (x) def
372 13f7391e 2004-05-15 devnull (y) cvn (y) def
373 13f7391e 2004-05-15 devnull (z) cvn (z) def
374 13f7391e 2004-05-15 devnull ({) cvn ({) def
375 13f7391e 2004-05-15 devnull (|) cvn (|) def
376 13f7391e 2004-05-15 devnull (}) cvn (}) def
377 13f7391e 2004-05-15 devnull (~) cvn (~) def
378 13f7391e 2004-05-15 devnull end def
379 13f7391e 2004-05-15 devnull
380 13f7391e 2004-05-15 devnull %
381 13f7391e 2004-05-15 devnull % OperatorDict can help format procedure listings. The value assigned to each
382 13f7391e 2004-05-15 devnull % name is used as an index into the OperatorProcs array. The procedure at that
383 13f7391e 2004-05-15 devnull % index is fetched and executed after the named operator is printed. What's in
384 13f7391e 2004-05-15 devnull % OperatorDict is a matter of taste rather than correctness. The default list
385 13f7391e 2004-05-15 devnull % represents our choice of which of Adobe's operators should end a line.
386 13f7391e 2004-05-15 devnull %
387 13f7391e 2004-05-15 devnull
388 13f7391e 2004-05-15 devnull /OperatorProcs [{} {Newline Indent}] def
389 13f7391e 2004-05-15 devnull
390 13f7391e 2004-05-15 devnull /OperatorDict 250 dict def
391 13f7391e 2004-05-15 devnull
392 13f7391e 2004-05-15 devnull OperatorDict /arc 1 put
393 13f7391e 2004-05-15 devnull OperatorDict /arcn 1 put
394 13f7391e 2004-05-15 devnull OperatorDict /ashow 1 put
395 13f7391e 2004-05-15 devnull OperatorDict /awidthshow 1 put
396 13f7391e 2004-05-15 devnull OperatorDict /banddevice 1 put
397 13f7391e 2004-05-15 devnull OperatorDict /begin 1 put
398 13f7391e 2004-05-15 devnull OperatorDict /charpath 1 put
399 13f7391e 2004-05-15 devnull OperatorDict /clear 1 put
400 13f7391e 2004-05-15 devnull OperatorDict /cleardictstack 1 put
401 13f7391e 2004-05-15 devnull OperatorDict /cleartomark 1 put
402 13f7391e 2004-05-15 devnull OperatorDict /clip 1 put
403 13f7391e 2004-05-15 devnull OperatorDict /clippath 1 put
404 13f7391e 2004-05-15 devnull OperatorDict /closefile 1 put
405 13f7391e 2004-05-15 devnull OperatorDict /closepath 1 put
406 13f7391e 2004-05-15 devnull OperatorDict /concat 1 put
407 13f7391e 2004-05-15 devnull OperatorDict /copypage 1 put
408 13f7391e 2004-05-15 devnull OperatorDict /curveto 1 put
409 13f7391e 2004-05-15 devnull OperatorDict /def 1 put
410 13f7391e 2004-05-15 devnull OperatorDict /end 1 put
411 13f7391e 2004-05-15 devnull OperatorDict /eoclip 1 put
412 13f7391e 2004-05-15 devnull OperatorDict /eofill 1 put
413 13f7391e 2004-05-15 devnull OperatorDict /erasepage 1 put
414 13f7391e 2004-05-15 devnull OperatorDict /exec 1 put
415 13f7391e 2004-05-15 devnull OperatorDict /exit 1 put
416 13f7391e 2004-05-15 devnull OperatorDict /fill 1 put
417 13f7391e 2004-05-15 devnull OperatorDict /flattenpath 1 put
418 13f7391e 2004-05-15 devnull OperatorDict /flush 1 put
419 13f7391e 2004-05-15 devnull OperatorDict /flushfile 1 put
420 13f7391e 2004-05-15 devnull OperatorDict /for 1 put
421 13f7391e 2004-05-15 devnull OperatorDict /forall 1 put
422 13f7391e 2004-05-15 devnull OperatorDict /framedevice 1 put
423 13f7391e 2004-05-15 devnull OperatorDict /grestore 1 put
424 13f7391e 2004-05-15 devnull OperatorDict /grestoreall 1 put
425 13f7391e 2004-05-15 devnull OperatorDict /gsave 1 put
426 13f7391e 2004-05-15 devnull OperatorDict /handleerror 1 put
427 13f7391e 2004-05-15 devnull OperatorDict /if 1 put
428 13f7391e 2004-05-15 devnull OperatorDict /ifelse 1 put
429 13f7391e 2004-05-15 devnull OperatorDict /image 1 put
430 13f7391e 2004-05-15 devnull OperatorDict /imagemask 1 put
431 13f7391e 2004-05-15 devnull OperatorDict /initclip 1 put
432 13f7391e 2004-05-15 devnull OperatorDict /initgraphics 1 put
433 13f7391e 2004-05-15 devnull OperatorDict /initmatrix 1 put
434 13f7391e 2004-05-15 devnull OperatorDict /kshow 1 put
435 13f7391e 2004-05-15 devnull OperatorDict /lineto 1 put
436 13f7391e 2004-05-15 devnull OperatorDict /loop 1 put
437 13f7391e 2004-05-15 devnull OperatorDict /moveto 1 put
438 13f7391e 2004-05-15 devnull OperatorDict /newpath 1 put
439 13f7391e 2004-05-15 devnull OperatorDict /nulldevice 1 put
440 13f7391e 2004-05-15 devnull OperatorDict /pathforall 1 put
441 13f7391e 2004-05-15 devnull OperatorDict /print 1 put
442 13f7391e 2004-05-15 devnull OperatorDict /prompt 1 put
443 13f7391e 2004-05-15 devnull OperatorDict /put 1 put
444 13f7391e 2004-05-15 devnull OperatorDict /putinterval 1 put
445 13f7391e 2004-05-15 devnull OperatorDict /quit 1 put
446 13f7391e 2004-05-15 devnull OperatorDict /rcurveto 1 put
447 13f7391e 2004-05-15 devnull OperatorDict /renderbands 1 put
448 13f7391e 2004-05-15 devnull OperatorDict /repeat 1 put
449 13f7391e 2004-05-15 devnull OperatorDict /resetfile 1 put
450 13f7391e 2004-05-15 devnull OperatorDict /restore 1 put
451 13f7391e 2004-05-15 devnull OperatorDict /reversepath 1 put
452 13f7391e 2004-05-15 devnull OperatorDict /rlineto 1 put
453 13f7391e 2004-05-15 devnull OperatorDict /rmoveto 1 put
454 13f7391e 2004-05-15 devnull OperatorDict /rotate 1 put
455 13f7391e 2004-05-15 devnull OperatorDict /run 1 put
456 13f7391e 2004-05-15 devnull OperatorDict /scale 1 put
457 13f7391e 2004-05-15 devnull OperatorDict /setcachedevice 1 put
458 13f7391e 2004-05-15 devnull OperatorDict /setcachelimit 1 put
459 13f7391e 2004-05-15 devnull OperatorDict /setcacheparams 1 put
460 13f7391e 2004-05-15 devnull OperatorDict /setcharwidth 1 put
461 13f7391e 2004-05-15 devnull OperatorDict /setdash 1 put
462 13f7391e 2004-05-15 devnull OperatorDict /setdefaulttimeouts 1 put
463 13f7391e 2004-05-15 devnull OperatorDict /setdostartpage 1 put
464 13f7391e 2004-05-15 devnull OperatorDict /seteescratch 1 put
465 13f7391e 2004-05-15 devnull OperatorDict /setflat 1 put
466 13f7391e 2004-05-15 devnull OperatorDict /setfont 1 put
467 13f7391e 2004-05-15 devnull OperatorDict /setgray 1 put
468 13f7391e 2004-05-15 devnull OperatorDict /sethsbcolor 1 put
469 13f7391e 2004-05-15 devnull OperatorDict /setidlefonts 1 put
470 13f7391e 2004-05-15 devnull OperatorDict /setjobtimeout 1 put
471 13f7391e 2004-05-15 devnull OperatorDict /setlinecap 1 put
472 13f7391e 2004-05-15 devnull OperatorDict /setlinejoin 1 put
473 13f7391e 2004-05-15 devnull OperatorDict /setlinewidth 1 put
474 13f7391e 2004-05-15 devnull OperatorDict /setmargins 1 put
475 13f7391e 2004-05-15 devnull OperatorDict /setmatrix 1 put
476 13f7391e 2004-05-15 devnull OperatorDict /setmiterlimit 1 put
477 13f7391e 2004-05-15 devnull OperatorDict /setpacking 1 put
478 13f7391e 2004-05-15 devnull OperatorDict /setpagetype 1 put
479 13f7391e 2004-05-15 devnull OperatorDict /setprintname 1 put
480 13f7391e 2004-05-15 devnull OperatorDict /setrgbcolor 1 put
481 13f7391e 2004-05-15 devnull OperatorDict /setsccbatch 1 put
482 13f7391e 2004-05-15 devnull OperatorDict /setsccinteractive 1 put
483 13f7391e 2004-05-15 devnull OperatorDict /setscreen 1 put
484 13f7391e 2004-05-15 devnull OperatorDict /settransfer 1 put
485 13f7391e 2004-05-15 devnull OperatorDict /show 1 put
486 13f7391e 2004-05-15 devnull OperatorDict /showpage 1 put
487 13f7391e 2004-05-15 devnull OperatorDict /start 1 put
488 13f7391e 2004-05-15 devnull OperatorDict /stop 1 put
489 13f7391e 2004-05-15 devnull OperatorDict /store 1 put
490 13f7391e 2004-05-15 devnull OperatorDict /stroke 1 put
491 13f7391e 2004-05-15 devnull OperatorDict /strokepath 1 put
492 13f7391e 2004-05-15 devnull OperatorDict /translate 1 put
493 13f7391e 2004-05-15 devnull OperatorDict /widthshow 1 put
494 13f7391e 2004-05-15 devnull OperatorDict /write 1 put
495 13f7391e 2004-05-15 devnull OperatorDict /writehexstring 1 put
496 13f7391e 2004-05-15 devnull OperatorDict /writestring 1 put
497 13f7391e 2004-05-15 devnull
498 13f7391e 2004-05-15 devnull end def
499 13f7391e 2004-05-15 devnull
500 13f7391e 2004-05-15 devnull %
501 13f7391e 2004-05-15 devnull % Put an object on the stack and call Grabit. Output continues until stack
502 13f7391e 2004-05-15 devnull % is empty. For example,
503 13f7391e 2004-05-15 devnull %
504 13f7391e 2004-05-15 devnull % /letter load Grabit
505 13f7391e 2004-05-15 devnull %
506 13f7391e 2004-05-15 devnull % prints a listing of the letter procedure.
507 13f7391e 2004-05-15 devnull %
508 13f7391e 2004-05-15 devnull
509 13f7391e 2004-05-15 devnull /Grabit {
510 13f7391e 2004-05-15 devnull /saveobj save def
511 13f7391e 2004-05-15 devnull GrabitDict begin
512 13f7391e 2004-05-15 devnull {
513 13f7391e 2004-05-15 devnull count 0 eq {exit} if
514 13f7391e 2004-05-15 devnull count {dup type exec} repeat
515 13f7391e 2004-05-15 devnull (\n) print flush
516 13f7391e 2004-05-15 devnull } loop
517 13f7391e 2004-05-15 devnull end
518 13f7391e 2004-05-15 devnull currentpoint % for hardcopy output
519 13f7391e 2004-05-15 devnull saveobj restore
520 13f7391e 2004-05-15 devnull moveto
521 13f7391e 2004-05-15 devnull } def
522 13f7391e 2004-05-15 devnull