123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367 |
- % Copyright (C) 1989, 2000 Aladdin Enterprises. All rights reserved.
- %
- % This file is part of AFPL Ghostscript.
- %
- % AFPL Ghostscript is distributed with NO WARRANTY OF ANY KIND. No author or
- % distributor accepts any responsibility for the consequences of using it, or
- % for whether it serves any particular purpose or works at all, unless he or
- % she says so in writing. Refer to the Aladdin Free Public License (the
- % "License") for full details.
- %
- % Every copy of AFPL Ghostscript must include a copy of the License, normally
- % in a plain ASCII text file named PUBLIC. The License grants you the right
- % to copy, modify and redistribute AFPL Ghostscript, but only under certain
- % conditions described in the License. Among other things, the License
- % requires that the copyright notice and this notice be preserved on all
- % copies.
- % $Id: gs_statd.ps,v 1.5 2001/05/30 21:14:35 rayjj Exp $
- % This file provides statusdict, serverdict, and assorted LaserWriter
- % operators, mostly for the benefit of poorly designed PostScript programs
- % that 'know' they are running on a LaserWriter.
- systemdict begin
- % We make statusdict a little larger for Level 2 stuff.
- % Note that it must be allocated in local VM.
- .currentglobal false .setglobal
- /statusdict 89 dict .forcedef % statusdict is local, sys'dict global
- % To support the Level 2 job control features,
- % serverdict must also be in local VM.
- /serverdict 10 dict .forcedef % serverdict is local, sys'dict global
- .setglobal
- end
- % Define various paper formats. The Adobe documentation defines only these:
- % 11x17, a3, a4, a4small, b5, ledger, legal, letter, lettersmall, note.
- % These procedures are also accessed as data structures during initialization,
- % so the page dimensions must be the first two elements of the procedure.
- /.setpagesize { /statusdict .systemvar begin .setpagesize end } bind def
- userdict begin
- % Page sizes defined by Adobe documentation
- /11x17 {792 1224 //.setpagesize exec} bind def % 11x17 portrait
- /a3 {842 1190 //.setpagesize exec} bind def
- /a4 {595 842 //.setpagesize exec} bind def
- % a4small should be a4 with an ImagingBBox of [25 25 570 817].
- /a4small /a4 load def
- % b5 see below.
- /ledger {1224 792 //.setpagesize exec} bind def % 11x17 landscape
- /legal {612 1008 //.setpagesize exec} bind def
- /letter {612 792 //.setpagesize exec} bind def
- % lettersmall should be letter with an ImagingBBox of [25 25 587 767].
- /lettersmall /letter load def
- % note should be letter (or some other size) with the ImagingBBox
- % shrunk by 25 units on all 4 sides.
- /note /letter load def
- % End of Adobe-defined page sizes
- STRICT { (%END SIZES) .skipeof } if
- % Other page sizes
- % ISO standard paper sizes
- /a0 {2380 3368 //.setpagesize exec} bind def
- /a1 {1684 2380 //.setpagesize exec} bind def
- /a2 {1190 1684 //.setpagesize exec} bind def
- % /a3 {842 1190 //.setpagesize exec} bind def % defined by Adobe
- % /a4 {595 842 //.setpagesize exec} bind def % defined by Adobe
- /a5 {421 595 //.setpagesize exec} bind def
- /a6 {297 421 //.setpagesize exec} bind def
- /a7 {210 297 //.setpagesize exec} bind def
- /a8 {148 210 //.setpagesize exec} bind def
- /a9 {105 148 //.setpagesize exec} bind def
- /a10 {74 105 //.setpagesize exec} bind def
- % ISO and JIS B sizes are different....
- /isob0 {2836 4008 //.setpagesize exec} bind def
- /b0 /isob0 load def
- /isob1 {2004 2836 //.setpagesize exec} bind def
- /b1 /isob1 load def
- /isob2 {1418 2004 //.setpagesize exec} bind def
- /b2 /isob2 load def
- /isob3 {1002 1418 //.setpagesize exec} bind def
- /b3 /isob3 load def
- /isob4 {709 1002 //.setpagesize exec} bind def
- /b4 /isob4 load def
- /isob5 {501 709 //.setpagesize exec} bind def
- /b5 /isob5 load def
- /isob6 {354 501 //.setpagesize exec} bind def
- /b6 /isob6 load def
- /jisb0 {2916 4128 //.setpagesize exec} bind def
- /jisb1 {2064 2916 //.setpagesize exec} bind def
- /jisb2 {1458 2064 //.setpagesize exec} bind def
- /jisb3 {1032 1458 //.setpagesize exec} bind def
- /jisb4 {729 1032 //.setpagesize exec} bind def
- /jisb5 {516 729 //.setpagesize exec} bind def
- /jisb6 {363 516 //.setpagesize exec} bind def
- /c0 {2600 3677 //.setpagesize exec} bind def
- /c1 {1837 2600 //.setpagesize exec} bind def
- /c2 {1298 1837 //.setpagesize exec} bind def
- /c3 {918 1298 //.setpagesize exec} bind def
- /c4 {649 918 //.setpagesize exec} bind def
- /c5 {459 649 //.setpagesize exec} bind def
- /c6 {323 459 //.setpagesize exec} bind def
- % U.S. CAD standard paper sizes
- /archE {2592 3456 //.setpagesize exec} bind def
- /archD {1728 2592 //.setpagesize exec} bind def
- /archC {1296 1728 //.setpagesize exec} bind def
- /archB {864 1296 //.setpagesize exec} bind def
- /archA {648 864 //.setpagesize exec} bind def
- % Other paper sizes
- /flsa {612 936 //.setpagesize exec} bind def % U.S. foolscap
- /flse {612 936 //.setpagesize exec} bind def % European foolscap
- /halfletter {396 612 //.setpagesize exec} bind def
- % /tabloid {792 1224 //.setpagesize exec} bind def % 11x17 portrait
- % /csheet {1224 1584 //.setpagesize exec} bind def % ANSI C 17x22
- % /dsheet {1584 2448 //.setpagesize exec} bind def % ANSI D 22x34
- % /esheet {2448 3168 //.setpagesize exec} bind def % ANSI E 34x44
- %END SIZES
- end
- currentdict /.setpagesize .undef
- statusdict begin
- % Define the pagetype values for the known page formats.
- % The values for all but letter and note are arbitrary.
- /.pagetypenames
- { /letter /note %do not change this line, needed by 'setpagetype'
- /legal /lettersmall
- /11x17 /ledger
- /a4small /a3 /a4
- STRICT { (%END SIZES) .skipeof } if
- /a0 /a1 /a2 /a5 /a6 /a7 /a8 /a9 /a10
- /archA /archB /archC /archD /archE
- /b0 /b1 /b2 /b3 /b4 /b5 /b6
- /c0 /c1 /c2 /c3 /c4 /c5 /c6
- /flsa /flse /halfletter
- /isob0 /isob1 /isob2 /isob3 /isob4 /isob5 /isob6
- /jisb0 /jisb1 /jisb2 /jisb3 /jisb4 /jisb5 /jisb6
- %END SIZES
- } cvlit readonly def
- %%%%%% The following items were suggested by a user as useful.
- % Permanent definitions
- /ramsize 4194304 def
- /hardwareiomode 0 def
- /sethardwareiomode {pop} bind def
- /softwareiomode 0 def
- /setsoftwareiomode {pop} bind def
- /dosysstart false def
- /setdosysstart {pop} bind def
- /allowjobreset true def
- /setallowjobreset {pop} bind def
- /defaultpaperfamily 0 def
- /setdefaultpaperfamily {pop} bind def
- /defaultpapertray 0 def
- /setdefaultpapertray {pop} bind def
- /defaulttrayswitch false def
- /setdefaulttrayswitch {pop} bind def
- % Tray and format selection
- /11x17tray {/11x17 .uservar exec} bind def
- /a3tray {/a3 .uservar exec} bind def
- /a4tray {/a4 .uservar exec} bind def
- /a5tray {/a5 .uservar exec} bind def
- /a6tray {/a6 .uservar exec} bind def
- /b4tray {/b4 .uservar exec} bind def
- /b5tray {/b5 .uservar exec} bind def
- /flsatray {/flsa .uservar exec} bind def
- /flsetray {/flse .uservar exec} bind def
- /halflettertray {/halfletter .uservar exec} bind def
- /ledgertray {/ledger .uservar exec} bind def
- /legaltray {/legal .uservar exec} bind def
- /lettertray {/letter .uservar exec} bind def
- % Per-job parameters
- /paperfamily 0 def % 0 is US, 1 is European
- /papertray 1 def
- /setpapertray {statusdict exch /papertray exch put} bind def
- /trayswitch false def % paperout feeds from another tray
- % We don't implement the (undocumented by Adobe) papersize 'operator',
- % because it's very awkward to make it interact properly with all the
- % different ways of setting the paper size.
- %/papersize {/letter true} bind def % <name of paper size>, <short-edge-first-p>
- /appletalktype (LaserWriter) def
- %%%%%% The following items are defined in the PostScript Language
- %%%%%% Reference Manual, First Edition, and subsequent 'compatibility'
- %%%%%% documentation from Adobe.
- /checkpassword {statusdict begin .password eq end} bind def
- /defaulttimeouts {statusdict begin .timeouts aload pop end} bind def
- /diskonline {
- false (%disk*%) { pop not exit } 100 string /IODevice resourceforall
- } bind def
- %/dostartpage
- /eescratch {pop 0} bind def
- /idlefonts {statusdict begin mark .idlefonts aload pop end} bind def
- /jobname () def
- %/jobtimeout
- /manualfeed false def
- /manualfeedtimeout 60 def
- /margins {statusdict begin .topmargin .leftmargin end} bind def
- /pagecount {4711} bind def
- /pagestackorder {false} bind def
- /pagetype 0 def
- /prefeed false def
- /printererror {pop pop} bind def
- /printername {statusdict /.printername get exch copy} bind def
- /processcolors /processcolors load def % defined in systemdict
- /product product def % product is defined in systemdict
- /revision revision def % revision is defined in systemdict
- /sccbatch {pop 9600 0} bind def
- /sccinteractive {pop 9600 0} bind def
- /setdefaulttimeouts {statusdict begin .timeouts astore pop end} bind def
- /setdostartpage {statusdict exch /dostartpage exch put} bind def
- /setduplexmode {mark /Duplex 3 -1 roll currentdevice putdeviceprops} bind def
- /seteescratch {pop pop} bind def
- /setidlefonts {] statusdict exch /.idlefonts exch put} bind def
- /setjobtimeout {statusdict exch /jobtimeout exch put} bind def
- /setmargins
- { statusdict begin
- /.leftmargin exch def /.topmargin exch def
- end
- } bind def
- % The following compatibility operators are only documented by Adobe in a
- % supplement to the Red Book.
- %
- % - pagemargin <offset>
- % - pageparams <width> <height> <offset> <orientation>
- % <width> <height> <orientation> setpage -
- % <offset> setpagemargin -
- % <width> <height> <offset> <orientation> setpageparams -
- %
- % width and height are in default units (and if orientation is odd, are
- % exchanged!). offset is the x margin, also in default units.
- % Unfortunately, because orientation is relative to the device paper feed,
- % it does not have a consistent meaning in terms of image orientation.
- % We follow the convention that ORIENT1 determines the orientation value
- % that means portait: false means 0, true means 1.
- /pagemargin { 0 } bind def
- /pageparams
- { currentdevice 1 dict dup /.MediaSize dup put .getdeviceparams
- exch pop exch pop aload pop 0 ORIENT1 { 1 } { 0 } ifelse
- } bind def
- /setpage
- { ORIENT1 { 1 } { 0 } ifelse ne {exch} if
- statusdict /.setpagesize get exec
- } bind def
- /setpagemargin {pop} bind def % can't do better without setpagedevice
- /setpageparams
- { exch pop ORIENT1 { 1 } { 0 } ifelse ne {exch} if
- statusdict /.setpagesize get exec
- } bind def
- /setpagetype
- { statusdict begin
- % The Adobe documentation only defines setpagetype
- % (a Level 1 operator) as accepting the values 0 and 1,
- % so we do too.
- dup .pagetypenames 0 2 getinterval exch get //systemdict exch get exec
- /pagetype exch def
- end
- } bind def
- /setpassword
- {exch checkpassword
- {statusdict exch /.password exch put true}
- {pop false}
- ifelse} bind def
- /setprintername
- {dup length string copy statusdict exch /.printername exch put} bind def
- % setresolution is not documented by Adobe, but some applications
- % use it anyway, without testing whether or not it is present.
- %
- % <pixels_per_inch> setresolution -
- %
- % sets the resolution of the device.
- /setresolution
- { mark /HWResolution [ 4 -1 roll dup ] currentdevice putdeviceprops pop
- initmatrix erasepage
- } bind def
- /setsccbatch {pop pop pop} bind def
- /setsccinteractive {pop pop pop} bind def
- /settumble {pop} bind def
- /waittimeout 300 def
- %%%%%% End of documented items.
- /.setpagesize
- { mark /HWSize [
- 4 index 4 index matrix defaultmatrix dtransform
- abs ceiling cvi exch abs ceiling cvi exch
- ] currentdevice putdeviceprops pop pop pop
- initmatrix initclip erasepage
- } bind def
- /.password 0 def
- /.timeouts [0 60 30] def
- true setdostartpage
- mark setidlefonts
- 0 setjobtimeout
- 0 0 setmargins
- product setprintername
- end % statusdict
- %%%%%% The following documented compatibility "operators" are in systemdict,
- %%%%%% not in statusdict.
- systemdict begin
- .currentglobal true .setglobal
- /devforall { % <pattern> <proc> <scratch> devforall -
- exch {
- 1 index currentdevparams
- /Type .knownget { /FileSystem eq } { false } ifelse
- { exec } { pop pop } ifelse
- } /exec load 3 packedarray cvx exch
- (*) 3 1 roll /IODevice resourceforall
- } odef
- /devstatus { % <(%disk*%)> devstatus <searchable> <writable>
- % <hasNames> <mounted> <removable> <searchOrder>
- % <freePages> <size> true
- % <string> devstatus false
- dup length 5 ge {
- dup 0 5 getinterval (%disk) eq {
- dup /IODevice resourcestatus {
- pop pop dup currentdevparams
- dup /Searchable get
- exch dup /Writeable get
- exch dup /HasNames get
- exch dup /Mounted get
- exch dup /Removable get
- exch dup /SearchOrder get
- exch dup /Free get
- exch /LogicalSize get
- 9 -1 roll pop true
- } {
- pop false
- } ifelse
- } {
- pop false
- } ifelse
- } {
- pop false
- } ifelse
- } odef
- .setglobal end % systemdict
- % The following contents of serverdict are a complete guess,
- % based on some observed LaserWriter boilerplate.
- serverdict begin
- /execjob { } bind def
- % The Red Book implies that something like the following is
- % an appropriate definition of exitserver.
- /exitserver { clear stop } bind def
- % However, this interacts badly with our standard error handler,
- % so we override it with the following less appropriate definition.
- /exitserver { 0 ne { clear cleardictstack } if } bind def
- /setrealdevice { } bind def
- end % serverdict
|