% Copyright (C) 1989, 1996, 1997, 1998 Aladdin Enterprises. All rights reserved. % % This file is part of Aladdin Ghostscript. % % Aladdin 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 Ghostscript Free Public % License (the "License") for full details. % % Every copy of Aladdin 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 Aladdin 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. % 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 {501 709 //.setpagesize exec} bind def /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) .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 /b0 {2836 4008 //.setpagesize exec} bind def /b1 {2004 2836 //.setpagesize exec} bind def /b2 {1418 2004 //.setpagesize exec} bind def /b3 {1002 1418 //.setpagesize exec} bind def /b4 {709 1002 //.setpagesize exec} bind def % /b5 {501 709 //.setpagesize exec} bind def % defined by Adobe /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 /legal /a0 /a1 /a2 /a3 /a4 /a5 /a6 /a7 /a8 /a9 /a10 /b0 /b1 /b2 /b3 /b4 /b5 /archE /archD /archC /archB /archA /flsa /flse /halfletter /11x17 /ledger } 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 userdict /11x17 get def /a3tray userdict /a3 get def /a4tray userdict /a4 get def /a5tray userdict /a5 get def /a6tray userdict /a6 get def /b4tray userdict /b4 get def /flsatray userdict /flsa get def /flsetray userdict /flse get def /halflettertray userdict /halfletter get def /ledgertray userdict /ledger get def /legaltray userdict /legal get def /lettertray userdict /letter get 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 % , /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 %/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 % - pageparams % setpage - % setpagemargin - % 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 dup .pagetypenames 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. % % 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 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