374 lines · 13.1 KB · Text
RawDownload
%    Copyright (C) 1989, 2000 Aladdin Enterprises.  All rights reserved.% % This software is provided AS-IS with no warranty, either express or% implied.% % This software is distributed under license and may not be copied,% modified or distributed except as expressly authorized under the terms% of the license contained in the file LICENSE in this distribution.% % For more information about licensing, please refer to% http://www.ghostscript.com/licensing/. For information on% commercial licensing, go to http://www.artifex.com/licensing/ or% contact Artifex Software, Inc., 101 Lucas Valley Road #110,% San Rafael, CA  94903, U.S.A., +1(415)492-9861. % $Id: gs_statd.ps,v 1.14 2003/12/17 09:45:58 ray 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		% Note: these executable arrays should all begin with two		% integers which are the width and height (see gs_setpd.ps). /11x17 {792 1224 //.setpagesize exec} bind def  % 11x17 portrait /a3 {842 1191 //.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 SIZES) .skipeof } if		% Other page sizes	% ISO standard paper sizes /a0 {2384 3370 //.setpagesize exec} bind def /a1 {1684 2384 //.setpagesize exec} bind def /a2 {1191 1684 //.setpagesize exec} bind def% /a3 {842 1191 //.setpagesize exec} bind def	% defined by Adobe% /a4 {595 842 //.setpagesize exec} bind def	% defined by Adobe /a5 {420 595 //.setpagesize exec} bind def /a6 {297 420 //.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 {73 105 //.setpagesize exec} bind def% ISO and JIS B sizes are different.... /isob0 {2835 4008 //.setpagesize exec} bind def /b0 /isob0 load def /isob1 {2004 2835 //.setpagesize exec} bind def /b1 /isob1 load def /isob2 {1417 2004 //.setpagesize exec} bind def /b2 /isob2 load def /isob3 {1001 1417 //.setpagesize exec} bind def /b3 /isob3 load def /isob4 {709 1001 //.setpagesize exec} bind def /b4 /isob4 load def /isob5 {499 709 //.setpagesize exec} bind def /b5 /isob5 load def /isob6 {354 499 //.setpagesize exec} bind def /b6 /isob6 load def /jisb0 {2920 4127 //.setpagesize exec} bind def /jisb1 {2064 2920 //.setpagesize exec} bind def /jisb2 {1460 2064 //.setpagesize exec} bind def /jisb3 {1032 1460 //.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 {2599 3677 //.setpagesize exec} bind def /c1 {1837 2599 //.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	% minimum of a4 and letter (a4 width, letter length) /pa4 {595 792 //.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 .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 /a4STRICT { (%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   /pa4%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 } 8192 string /IODevice resourceforall } bind def /diskstatus {10240 2097152 } bind odef %  - diskstatus <free> <total> (in 1024 byte pages) %/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 /userdict get exch get cvx 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 setprintername end	% statusdict %%%%%% The following documented compatibility "operators" are in systemdict,%%%%%% not in statusdict. systemdict begin.currentglobal true .setglobal /devformat true def/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