2 |
- |
1 |
% Copyright (C) 1989, 2000 Aladdin Enterprises. All rights reserved.
|
|
|
2 |
%
|
|
|
3 |
% This software is provided AS-IS with no warranty, either express or
|
|
|
4 |
% implied.
|
|
|
5 |
%
|
|
|
6 |
% This software is distributed under license and may not be copied,
|
|
|
7 |
% modified or distributed except as expressly authorized under the terms
|
|
|
8 |
% of the license contained in the file LICENSE in this distribution.
|
|
|
9 |
%
|
|
|
10 |
% For more information about licensing, please refer to
|
|
|
11 |
% http://www.ghostscript.com/licensing/. For information on
|
|
|
12 |
% commercial licensing, go to http://www.artifex.com/licensing/ or
|
|
|
13 |
% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
|
|
|
14 |
% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
|
|
|
15 |
|
|
|
16 |
% $Id: gs_statd.ps,v 1.14 2003/12/17 09:45:58 ray Exp $
|
|
|
17 |
% This file provides statusdict, serverdict, and assorted LaserWriter
|
|
|
18 |
% operators, mostly for the benefit of poorly designed PostScript programs
|
|
|
19 |
% that 'know' they are running on a LaserWriter.
|
|
|
20 |
|
|
|
21 |
systemdict begin
|
|
|
22 |
% We make statusdict a little larger for Level 2 stuff.
|
|
|
23 |
% Note that it must be allocated in local VM.
|
|
|
24 |
.currentglobal false .setglobal
|
|
|
25 |
/statusdict 89 dict .forcedef % statusdict is local, sys'dict global
|
|
|
26 |
% To support the Level 2 job control features,
|
|
|
27 |
% serverdict must also be in local VM.
|
|
|
28 |
/serverdict 10 dict .forcedef % serverdict is local, sys'dict global
|
|
|
29 |
.setglobal
|
|
|
30 |
end
|
|
|
31 |
|
|
|
32 |
% Define various paper formats. The Adobe documentation defines only these:
|
|
|
33 |
% 11x17, a3, a4, a4small, b5, ledger, legal, letter, lettersmall, note.
|
|
|
34 |
% These procedures are also accessed as data structures during initialization,
|
|
|
35 |
% so the page dimensions must be the first two elements of the procedure.
|
|
|
36 |
|
|
|
37 |
/.setpagesize { /statusdict .systemvar begin .setpagesize end } bind def
|
|
|
38 |
userdict begin
|
|
|
39 |
% Page sizes defined by Adobe documentation
|
|
|
40 |
% Note: these executable arrays should all begin with two
|
|
|
41 |
% integers which are the width and height (see gs_setpd.ps).
|
|
|
42 |
/11x17 {792 1224 //.setpagesize exec} bind def % 11x17 portrait
|
|
|
43 |
/a3 {842 1191 //.setpagesize exec} bind def
|
|
|
44 |
/a4 {595 842 //.setpagesize exec} bind def
|
|
|
45 |
% a4small should be a4 with an ImagingBBox of [25 25 570 817].
|
|
|
46 |
/a4small /a4 load def
|
|
|
47 |
% b5 see below.
|
|
|
48 |
/ledger {1224 792 //.setpagesize exec} bind def % 11x17 landscape
|
|
|
49 |
/legal {612 1008 //.setpagesize exec} bind def
|
|
|
50 |
/letter {612 792 //.setpagesize exec} bind def
|
|
|
51 |
% lettersmall should be letter with an ImagingBBox of [25 25 587 767].
|
|
|
52 |
/lettersmall /letter load def
|
|
|
53 |
% note should be letter (or some other size) with the ImagingBBox
|
|
|
54 |
% shrunk by 25 units on all 4 sides.
|
|
|
55 |
/note /letter load def
|
|
|
56 |
% End of Adobe-defined page sizes
|
|
|
57 |
STRICT { (%END SIZES) .skipeof } if
|
|
|
58 |
% Other page sizes
|
|
|
59 |
% ISO standard paper sizes
|
|
|
60 |
/a0 {2384 3370 //.setpagesize exec} bind def
|
|
|
61 |
/a1 {1684 2384 //.setpagesize exec} bind def
|
|
|
62 |
/a2 {1191 1684 //.setpagesize exec} bind def
|
|
|
63 |
% /a3 {842 1191 //.setpagesize exec} bind def % defined by Adobe
|
|
|
64 |
% /a4 {595 842 //.setpagesize exec} bind def % defined by Adobe
|
|
|
65 |
/a5 {420 595 //.setpagesize exec} bind def
|
|
|
66 |
/a6 {297 420 //.setpagesize exec} bind def
|
|
|
67 |
/a7 {210 297 //.setpagesize exec} bind def
|
|
|
68 |
/a8 {148 210 //.setpagesize exec} bind def
|
|
|
69 |
/a9 {105 148 //.setpagesize exec} bind def
|
|
|
70 |
/a10 {73 105 //.setpagesize exec} bind def
|
|
|
71 |
% ISO and JIS B sizes are different....
|
|
|
72 |
/isob0 {2835 4008 //.setpagesize exec} bind def
|
|
|
73 |
/b0 /isob0 load def
|
|
|
74 |
/isob1 {2004 2835 //.setpagesize exec} bind def
|
|
|
75 |
/b1 /isob1 load def
|
|
|
76 |
/isob2 {1417 2004 //.setpagesize exec} bind def
|
|
|
77 |
/b2 /isob2 load def
|
|
|
78 |
/isob3 {1001 1417 //.setpagesize exec} bind def
|
|
|
79 |
/b3 /isob3 load def
|
|
|
80 |
/isob4 {709 1001 //.setpagesize exec} bind def
|
|
|
81 |
/b4 /isob4 load def
|
|
|
82 |
/isob5 {499 709 //.setpagesize exec} bind def
|
|
|
83 |
/b5 /isob5 load def
|
|
|
84 |
/isob6 {354 499 //.setpagesize exec} bind def
|
|
|
85 |
/b6 /isob6 load def
|
|
|
86 |
/jisb0 {2920 4127 //.setpagesize exec} bind def
|
|
|
87 |
/jisb1 {2064 2920 //.setpagesize exec} bind def
|
|
|
88 |
/jisb2 {1460 2064 //.setpagesize exec} bind def
|
|
|
89 |
/jisb3 {1032 1460 //.setpagesize exec} bind def
|
|
|
90 |
/jisb4 {729 1032 //.setpagesize exec} bind def
|
|
|
91 |
/jisb5 {516 729 //.setpagesize exec} bind def
|
|
|
92 |
/jisb6 {363 516 //.setpagesize exec} bind def
|
|
|
93 |
/c0 {2599 3677 //.setpagesize exec} bind def
|
|
|
94 |
/c1 {1837 2599 //.setpagesize exec} bind def
|
|
|
95 |
/c2 {1298 1837 //.setpagesize exec} bind def
|
|
|
96 |
/c3 {918 1298 //.setpagesize exec} bind def
|
|
|
97 |
/c4 {649 918 //.setpagesize exec} bind def
|
|
|
98 |
/c5 {459 649 //.setpagesize exec} bind def
|
|
|
99 |
/c6 {323 459 //.setpagesize exec} bind def
|
|
|
100 |
% U.S. CAD standard paper sizes
|
|
|
101 |
/archE {2592 3456 //.setpagesize exec} bind def
|
|
|
102 |
/archD {1728 2592 //.setpagesize exec} bind def
|
|
|
103 |
/archC {1296 1728 //.setpagesize exec} bind def
|
|
|
104 |
/archB {864 1296 //.setpagesize exec} bind def
|
|
|
105 |
/archA {648 864 //.setpagesize exec} bind def
|
|
|
106 |
% Other paper sizes
|
|
|
107 |
/flsa {612 936 //.setpagesize exec} bind def % U.S. foolscap
|
|
|
108 |
/flse {612 936 //.setpagesize exec} bind def % European foolscap
|
|
|
109 |
/halfletter {396 612 //.setpagesize exec} bind def
|
|
|
110 |
% minimum of a4 and letter (a4 width, letter length)
|
|
|
111 |
/pa4 {595 792 //.setpagesize exec} bind def
|
|
|
112 |
% /tabloid {792 1224 //.setpagesize exec} bind def % 11x17 portrait
|
|
|
113 |
% /csheet {1224 1584 //.setpagesize exec} bind def % ANSI C 17x22
|
|
|
114 |
% /dsheet {1584 2448 //.setpagesize exec} bind def % ANSI D 22x34
|
|
|
115 |
% /esheet {2448 3168 //.setpagesize exec} bind def % ANSI E 34x44
|
|
|
116 |
%END SIZES
|
|
|
117 |
end
|
|
|
118 |
currentdict /.setpagesize .undef
|
|
|
119 |
|
|
|
120 |
statusdict begin
|
|
|
121 |
|
|
|
122 |
% Define the pagetype values for the known page formats.
|
|
|
123 |
% The values for all but letter and note are arbitrary.
|
|
|
124 |
/.pagetypenames
|
|
|
125 |
[ /letter /note %do not change this line, needed by 'setpagetype'
|
|
|
126 |
/legal /lettersmall
|
|
|
127 |
/11x17 /ledger
|
|
|
128 |
/a4small /a3 /a4
|
|
|
129 |
STRICT { (%END SIZES) .skipeof } if
|
|
|
130 |
/a0 /a1 /a2 /a5 /a6 /a7 /a8 /a9 /a10
|
|
|
131 |
/archA /archB /archC /archD /archE
|
|
|
132 |
/b0 /b1 /b2 /b3 /b4 /b5 /b6
|
|
|
133 |
/c0 /c1 /c2 /c3 /c4 /c5 /c6
|
|
|
134 |
/flsa /flse /halfletter
|
|
|
135 |
/isob0 /isob1 /isob2 /isob3 /isob4 /isob5 /isob6
|
|
|
136 |
/jisb0 /jisb1 /jisb2 /jisb3 /jisb4 /jisb5 /jisb6
|
|
|
137 |
/pa4
|
|
|
138 |
%END SIZES
|
|
|
139 |
] cvlit readonly def
|
|
|
140 |
|
|
|
141 |
%%%%%% The following items were suggested by a user as useful.
|
|
|
142 |
|
|
|
143 |
% Permanent definitions
|
|
|
144 |
|
|
|
145 |
/ramsize 4194304 def
|
|
|
146 |
/hardwareiomode 0 def
|
|
|
147 |
/sethardwareiomode {pop} bind def
|
|
|
148 |
/softwareiomode 0 def
|
|
|
149 |
/setsoftwareiomode {pop} bind def
|
|
|
150 |
/dosysstart false def
|
|
|
151 |
/setdosysstart {pop} bind def
|
|
|
152 |
/allowjobreset true def
|
|
|
153 |
/setallowjobreset {pop} bind def
|
|
|
154 |
/defaultpaperfamily 0 def
|
|
|
155 |
/setdefaultpaperfamily {pop} bind def
|
|
|
156 |
/defaultpapertray 0 def
|
|
|
157 |
/setdefaultpapertray {pop} bind def
|
|
|
158 |
/defaulttrayswitch false def
|
|
|
159 |
/setdefaulttrayswitch {pop} bind def
|
|
|
160 |
|
|
|
161 |
% Tray and format selection
|
|
|
162 |
|
|
|
163 |
/11x17tray {/11x17 .uservar exec} bind def
|
|
|
164 |
/a3tray {/a3 .uservar exec} bind def
|
|
|
165 |
/a4tray {/a4 .uservar exec} bind def
|
|
|
166 |
/a5tray {/a5 .uservar exec} bind def
|
|
|
167 |
/a6tray {/a6 .uservar exec} bind def
|
|
|
168 |
/b4tray {/b4 .uservar exec} bind def
|
|
|
169 |
/b5tray {/b5 .uservar exec} bind def
|
|
|
170 |
/flsatray {/flsa .uservar exec} bind def
|
|
|
171 |
/flsetray {/flse .uservar exec} bind def
|
|
|
172 |
/halflettertray {/halfletter .uservar exec} bind def
|
|
|
173 |
/ledgertray {/ledger .uservar exec} bind def
|
|
|
174 |
/legaltray {/legal .uservar exec} bind def
|
|
|
175 |
/lettertray {/letter .uservar exec} bind def
|
|
|
176 |
|
|
|
177 |
% Per-job parameters
|
|
|
178 |
|
|
|
179 |
/paperfamily 0 def % 0 is US, 1 is European
|
|
|
180 |
/papertray 1 def
|
|
|
181 |
/setpapertray {statusdict exch /papertray exch put} bind def
|
|
|
182 |
/trayswitch false def % paperout feeds from another tray
|
|
|
183 |
% We don't implement the (undocumented by Adobe) papersize 'operator',
|
|
|
184 |
% because it's very awkward to make it interact properly with all the
|
|
|
185 |
% different ways of setting the paper size.
|
|
|
186 |
%/papersize {/letter true} bind def % <name of paper size>, <short-edge-first-p>
|
|
|
187 |
/appletalktype (LaserWriter) def
|
|
|
188 |
|
|
|
189 |
%%%%%% The following items are defined in the PostScript Language
|
|
|
190 |
%%%%%% Reference Manual, First Edition, and subsequent 'compatibility'
|
|
|
191 |
%%%%%% documentation from Adobe.
|
|
|
192 |
|
|
|
193 |
/checkpassword {statusdict begin .password eq end} bind def
|
|
|
194 |
/defaulttimeouts {statusdict begin .timeouts aload pop end} bind def
|
|
|
195 |
/diskonline {
|
|
|
196 |
false (%disk*%) { pop not exit } 8192 string /IODevice resourceforall
|
|
|
197 |
} bind def
|
|
|
198 |
/diskstatus {10240 2097152 } bind odef % - diskstatus <free> <total> (in 1024 byte pages)
|
|
|
199 |
|
|
|
200 |
%/dostartpage
|
|
|
201 |
/eescratch {pop 0} bind def
|
|
|
202 |
/idlefonts {statusdict begin mark .idlefonts aload pop end} bind def
|
|
|
203 |
/jobname () def
|
|
|
204 |
%/jobtimeout
|
|
|
205 |
/manualfeed false def
|
|
|
206 |
/manualfeedtimeout 60 def
|
|
|
207 |
/margins {statusdict begin .topmargin .leftmargin end} bind def
|
|
|
208 |
/pagecount {4711} bind def
|
|
|
209 |
/pagestackorder {false} bind def
|
|
|
210 |
/pagetype 0 def
|
|
|
211 |
/prefeed false def
|
|
|
212 |
/printererror {pop pop} bind def
|
|
|
213 |
/printername {statusdict /.printername get exch copy} bind def
|
|
|
214 |
/processcolors /processcolors load def % defined in systemdict
|
|
|
215 |
/product product def % product is defined in systemdict
|
|
|
216 |
/revision revision def % revision is defined in systemdict
|
|
|
217 |
/sccbatch {pop 9600 0} bind def
|
|
|
218 |
/sccinteractive {pop 9600 0} bind def
|
|
|
219 |
/setdefaulttimeouts {statusdict begin .timeouts astore pop end} bind def
|
|
|
220 |
/setdostartpage {statusdict exch /dostartpage exch put} bind def
|
|
|
221 |
/setduplexmode {mark /Duplex 3 -1 roll currentdevice putdeviceprops} bind def
|
|
|
222 |
/seteescratch {pop pop} bind def
|
|
|
223 |
/setidlefonts {] statusdict exch /.idlefonts exch put} bind def
|
|
|
224 |
/setjobtimeout {statusdict exch /jobtimeout exch put} bind def
|
|
|
225 |
/setmargins
|
|
|
226 |
{ statusdict begin
|
|
|
227 |
/.leftmargin exch def /.topmargin exch def
|
|
|
228 |
end
|
|
|
229 |
} bind def
|
|
|
230 |
|
|
|
231 |
% The following compatibility operators are only documented by Adobe in a
|
|
|
232 |
% supplement to the Red Book.
|
|
|
233 |
%
|
|
|
234 |
% - pagemargin <offset>
|
|
|
235 |
% - pageparams <width> <height> <offset> <orientation>
|
|
|
236 |
% <width> <height> <orientation> setpage -
|
|
|
237 |
% <offset> setpagemargin -
|
|
|
238 |
% <width> <height> <offset> <orientation> setpageparams -
|
|
|
239 |
%
|
|
|
240 |
% width and height are in default units (and if orientation is odd, are
|
|
|
241 |
% exchanged!). offset is the x margin, also in default units.
|
|
|
242 |
% Unfortunately, because orientation is relative to the device paper feed,
|
|
|
243 |
% it does not have a consistent meaning in terms of image orientation.
|
|
|
244 |
% We follow the convention that ORIENT1 determines the orientation value
|
|
|
245 |
% that means portait: false means 0, true means 1.
|
|
|
246 |
|
|
|
247 |
/pagemargin { 0 } bind def
|
|
|
248 |
/pageparams
|
|
|
249 |
{ currentdevice 1 dict dup /.MediaSize dup put .getdeviceparams
|
|
|
250 |
exch pop exch pop aload pop 0 ORIENT1 { 1 } { 0 } ifelse
|
|
|
251 |
} bind def
|
|
|
252 |
/setpage
|
|
|
253 |
{ ORIENT1 { 1 } { 0 } ifelse ne {exch} if
|
|
|
254 |
statusdict /.setpagesize get exec
|
|
|
255 |
} bind def
|
|
|
256 |
/setpagemargin {pop} bind def % can't do better without setpagedevice
|
|
|
257 |
/setpageparams
|
|
|
258 |
{ exch pop ORIENT1 { 1 } { 0 } ifelse ne {exch} if
|
|
|
259 |
statusdict /.setpagesize get exec
|
|
|
260 |
} bind def
|
|
|
261 |
/setpagetype
|
|
|
262 |
{ statusdict begin
|
|
|
263 |
% The Adobe documentation only defines setpagetype
|
|
|
264 |
% (a Level 1 operator) as accepting the values 0 and 1,
|
|
|
265 |
% so we do too.
|
|
|
266 |
dup .pagetypenames 0 2 getinterval exch get
|
|
|
267 |
//systemdict /userdict get exch get cvx exec
|
|
|
268 |
/pagetype exch def
|
|
|
269 |
end
|
|
|
270 |
} bind def
|
|
|
271 |
/setpassword
|
|
|
272 |
{exch checkpassword
|
|
|
273 |
{statusdict exch /.password exch put true}
|
|
|
274 |
{pop false}
|
|
|
275 |
ifelse} bind def
|
|
|
276 |
/setprintername
|
|
|
277 |
{dup length string copy statusdict exch /.printername exch put} bind def
|
|
|
278 |
|
|
|
279 |
% setresolution is not documented by Adobe, but some applications
|
|
|
280 |
% use it anyway, without testing whether or not it is present.
|
|
|
281 |
%
|
|
|
282 |
% <pixels_per_inch> setresolution -
|
|
|
283 |
%
|
|
|
284 |
% sets the resolution of the device.
|
|
|
285 |
|
|
|
286 |
/setresolution
|
|
|
287 |
{ mark /HWResolution [ 4 -1 roll dup ] currentdevice putdeviceprops pop
|
|
|
288 |
initmatrix erasepage
|
|
|
289 |
} bind def
|
|
|
290 |
/setsccbatch {pop pop pop} bind def
|
|
|
291 |
/setsccinteractive {pop pop pop} bind def
|
|
|
292 |
/settumble {pop} bind def
|
|
|
293 |
/waittimeout 300 def
|
|
|
294 |
|
|
|
295 |
%%%%%% End of documented items.
|
|
|
296 |
|
|
|
297 |
/.setpagesize
|
|
|
298 |
{ mark /HWSize [
|
|
|
299 |
4 index 4 index matrix defaultmatrix dtransform
|
|
|
300 |
abs ceiling cvi exch abs ceiling cvi exch
|
|
|
301 |
] currentdevice putdeviceprops pop pop pop
|
|
|
302 |
initmatrix initclip erasepage
|
|
|
303 |
} bind def
|
|
|
304 |
/.password 0 def
|
|
|
305 |
/.timeouts [0 60 30] def
|
|
|
306 |
true setdostartpage
|
|
|
307 |
mark setidlefonts
|
|
|
308 |
|
|
|
309 |
|
|
|
310 |
product setprintername
|
|
|
311 |
|
|
|
312 |
end % statusdict
|
|
|
313 |
|
|
|
314 |
%%%%%% The following documented compatibility "operators" are in systemdict,
|
|
|
315 |
%%%%%% not in statusdict.
|
|
|
316 |
|
|
|
317 |
systemdict begin
|
|
|
318 |
.currentglobal true .setglobal
|
|
|
319 |
|
|
|
320 |
/devformat true def
|
|
|
321 |
/devforall { % <pattern> <proc> <scratch> devforall -
|
|
|
322 |
exch {
|
|
|
323 |
1 index currentdevparams
|
|
|
324 |
/Type .knownget { /FileSystem eq } { false } ifelse
|
|
|
325 |
{ exec } { pop pop } ifelse
|
|
|
326 |
} /exec load 3 packedarray cvx exch
|
|
|
327 |
(*) 3 1 roll /IODevice resourceforall
|
|
|
328 |
} odef
|
|
|
329 |
|
|
|
330 |
/devstatus { % <(%disk*%)> devstatus <searchable> <writable>
|
|
|
331 |
% <hasNames> <mounted> <removable> <searchOrder>
|
|
|
332 |
% <freePages> <size> true
|
|
|
333 |
% <string> devstatus false
|
|
|
334 |
dup length 5 ge {
|
|
|
335 |
dup 0 5 getinterval (%disk) eq {
|
|
|
336 |
dup /IODevice resourcestatus {
|
|
|
337 |
pop pop dup currentdevparams
|
|
|
338 |
dup /Searchable get
|
|
|
339 |
exch dup /Writeable get
|
|
|
340 |
exch dup /HasNames get
|
|
|
341 |
exch dup /Mounted get
|
|
|
342 |
exch dup /Removable get
|
|
|
343 |
exch dup /SearchOrder get
|
|
|
344 |
exch dup /Free get
|
|
|
345 |
exch /LogicalSize get
|
|
|
346 |
9 -1 roll pop true
|
|
|
347 |
} {
|
|
|
348 |
pop false
|
|
|
349 |
} ifelse
|
|
|
350 |
} {
|
|
|
351 |
pop false
|
|
|
352 |
} ifelse
|
|
|
353 |
} {
|
|
|
354 |
pop false
|
|
|
355 |
} ifelse
|
|
|
356 |
} odef
|
|
|
357 |
|
|
|
358 |
.setglobal end % systemdict
|
|
|
359 |
|
|
|
360 |
% The following contents of serverdict are a complete guess,
|
|
|
361 |
% based on some observed LaserWriter boilerplate.
|
|
|
362 |
|
|
|
363 |
serverdict begin
|
|
|
364 |
|
|
|
365 |
/execjob { } bind def
|
|
|
366 |
% The Red Book implies that something like the following is
|
|
|
367 |
% an appropriate definition of exitserver.
|
|
|
368 |
/exitserver { clear stop } bind def
|
|
|
369 |
% However, this interacts badly with our standard error handler,
|
|
|
370 |
% so we override it with the following less appropriate definition.
|
|
|
371 |
/exitserver { 0 ne { clear cleardictstack } if } bind def
|
|
|
372 |
/setrealdevice { } bind def
|
|
|
373 |
|
|
|
374 |
end % serverdict
|