% Copyright (C) 1989, 2000 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.% $Id: gs_statd.ps,v 1.2 2000/03/10 04:01:55 lpd 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 .setglobalend% 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 defuserdict 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 sizesSTRICT { (%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% 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 SIZESendcurrentdict /.setpagesize .undefstatusdict 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 /b6 /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 {/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] deftrue setdostartpagemark setidlefonts0 setjobtimeout0 0 setmarginsproduct setprinternameend % 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 defend % serverdict
% Copyright (C) 1989, 2000 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.
% $Id: gs_statd.ps,v 1.2 2000/03/10 04:01:55 lpd 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) .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 /legal
/a0 /a1 /a2 /a3 /a4 /a5 /a6 /a7 /a8 /a9 /a10
/b0 /b1 /b2 /b3 /b4 /b5 /b6 /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 {/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