diff options
author | Karl Berry <karl@freefriends.org> | 2005-12-28 00:07:27 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2005-12-28 00:07:27 +0000 |
commit | 30dd9f517c9c093ff3319061647a4555264f7914 (patch) | |
tree | 0d7a349bf99be5a42cc9c5a80a30f3b7136c4ccd /Master/xemtex/gslib/gs_statd.ps | |
parent | 08ab8dce83f53b0f915cb66a37bbc8478b22c307 (diff) |
trunk
git-svn-id: svn://tug.org/texlive/trunk@9 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/xemtex/gslib/gs_statd.ps')
-rw-r--r-- | Master/xemtex/gslib/gs_statd.ps | 366 |
1 files changed, 366 insertions, 0 deletions
diff --git a/Master/xemtex/gslib/gs_statd.ps b/Master/xemtex/gslib/gs_statd.ps new file mode 100644 index 00000000000..824f480d239 --- /dev/null +++ b/Master/xemtex/gslib/gs_statd.ps @@ -0,0 +1,366 @@ +% Copyright (C) 1989, 2000 Aladdin Enterprises. All rights reserved. +% +% This program is free software; you can redistribute it and/or modify it +% under the terms of the GNU General Public License as published by the +% Free Software Foundation; either version 2 of the License, or (at your +% option) any later version. +% +% This program is distributed in the hope that it will be useful, but +% WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +% Public License for more details. +% +% You should have received a copy of the GNU General Public License along +% with this program; if not, write to the Free Software Foundation, Inc., +% 59 Temple Place, Suite 330, Boston, MA, 02111-1307. + +% $Id: gs_statd.ps,v 1.5.2.2.2.1 2003/04/12 14:02:38 giles 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 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 sizes +STRICT { (%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 +% /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 |