]> git.lizzy.rs Git - plan9front.git/blob - sys/lib/ghostscript/gs_statd.ps
etherbcm: handle 64-bit host addresses, use PCIWADDR() instead of PADDR()
[plan9front.git] / sys / lib / ghostscript / gs_statd.ps
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 0 setjobtimeout
309 0 0 setmargins
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