SETUP.TXT Driver File Contents (Gemini.zip)

%!PS-Adobe-2.1
%%Title: PostScript Setup File for SLATE
%%Creator: Symmetry Group
%%CreationDate: 06 Feb 1991
%%For: SLATE Support of PostScript Printers  3.0.0
%%Copyright: 1995 The Symmetry Group, Inc all rights reserved
%   =============================================
%   =  MODULE: SETUP.TXT                        =
%   = VERSION: 3.0.0                            =
%   =                                           =
%   =FUNCTION: SLATE - PostScript Setup File    =
%   =                                           =
%   =  SYSTEM: SLATE                            =
%   = SYSVERS: 2.2.11                           =
%   = CREATED: 06FEB91                          =
%   = UPDATED: 31JAN95                          =
%   =                                           =
%   = (c) 1991,92,93,94,95                      =
%   = BY: The Symmetry Group                    =
%   =============================================
%  UPDATE NOTE:  Be sure to change the Setup File version in
%  the Error Handler and Status routines match the current version.
%
%  To print Status at the bottom of each page, add STAT to the
%  printer Select End string.  (Note: The current version of STAT
%  will only print in the portrait mode.
%
%  This is set to provice a minimum sized file when all
%  comments with single '%' are removed and all extra spaces
%  are removed.
%
%  Functions are described in the form:
%
%  <in_parm1> <in_parm2> ... function <out_parm1> ...
%        where
%          <in_parm..>  are the input parameters on the stack
%                       in the usual PostScript notation.
%          <out_parm.>  are the output parameters left on the stack.
%          function     is the function.
%  
%  Note: Because of the PostScript way of handling text, most functions
%   that are called from SLATE have a text string as the first parameter.
%   In most cases, this should be printed before any additional operations
%   are performed.
%
%  Note: To minimize the size of the command strings in SLATE, most
%   functions that are to be called from SLATE have one character
%   names (usually a capital letter).  Internal functions have two
%   character names and internal variables have two character names
%   starting with '$'.  While this is somewhat hard to read (as is
%   all PostScript), it results in significantly less data transfer,
%   smaller SLATE string space, and a smaller setup file.
%
%  Virtual Memory (VM)
%   The memory management is rather trickey.  We need to conserve
%   Virtual Memory in early versions of PostScript which manage to fill
%   the current VM with discarded strings and structures while working with
%   PostScript Level 2 and later which do automatic garbage collection.
%   To acomplish this, two levels of VM are defined at the beginning
%   of a SLATE session.
%   
%   Base VM: The Base VM is created at the beginning of this include file
%     with a "save" command.  This level contains all features that need
%     to be preserved through a SLATE session (global variables, 
%     definitions, encoding vectors, etc.)  It does not include any
%     Font data.  The Base VM level is created at the beginning of this
%     include file and is "restored" at the end of the SLATE session with
%     the Close (C) command.
%
%   Form VM: The Form VM is created by the Setup (S), the Setup Landscape
%     (LS).  The Setup Form (FS) command "removes" the current Form VM
%     and creates a new one (without Fonts).  This provides a VM level
%     for storing fonts that can be removed with the Setup Form commands.
%
%   Working VM: The Working VM is created at the beginning of a SLATE 
%     Form with a "save" command (after creating the Form VM:). 
%     This level contains only current string and temporary data.  There
%     is no valid data in this level after a command is executed.  The
%     print page command (and a number of others) delete this level
%     and "save" a new Working VM level.  
%
%     Form VM Features:  To install a feature in the Form VM, "restore" 
%      to get out of the Working VM, create the feature, and "save" to
%      create a new Working VM.  (Of course the current stack status
%      must also be considered.
%
%     Note:  Special care must be taken when moving to the Form VM
%      level within a command that has strings on the stack.  The
%      string is stored in the Working VM level and will cause errors
%      if it is still on the stack when "restore" is called.  Two
%      string buffers are provided in the Base VM level for holding
%      strings that must be passed to the lower level.  See the "F"
%      command for an example of this usage.
%   
%     Note:  The HP/Adobe cartridge (Level 1 Vers 52.2) causes
%      special problems when switching to Duplex mode on an odd page.
%      There appears to be a bug (either in the HP code or the Adobe
%      code) that causes the printer to hang if any significant amount
%      of image data is printed.  The patch to stop this problem is
%      rather complex since the effective page number is reset if 
%      the paper size is changed.
% 
% HISTORY: 
%     VERS    DATE       BY   NOTES
%
%     2.2.0   06 Feb 91  CVP  Created
%     2.2.2   07 Nov 91  CVP  -Add "Y" Macro to select only.
%                             -Modify "T" and "X" macros to handle
%                             errors correctly.
%             21 Nov 91  CVP  -Add IBM-2 encoding vector and function
%                             (partial).
%     2.2.6C  27 Jul 92  CVP  -Add "IS2" Macro for non square image
%                             pixels.
%                             -Add Timeout set
%                             -Reset Paper Tray & Duplex
%                             -Reset Copies
%     2.2.7   04 Nov 92  CVP  -Add Color support.
%     2.2.11  15 Dec 93  CVP  -Add STAT command to print machine status &
%                             include it in new page command.
%                             -Develop save/restore memory management 
%                             system to prevent leakage of VM memory.
%                             -Add "bind" to most functions to improve
%                             speed.
%                             -Rewrite handleerror.
%                             -Revise timeout routines and set them in
%                             the lowest VM area.
%                             -Add more carefull testing of PS features
%                             before using them.
%                             -Revise Paper Tray Select to work with
%                             level 2 printers.
%     3.0.0   20 Sep 94  CVP  -Improve notes about VM.
%                             -Add additional level of VM for Form VM.
%                             -Improve Error Reporting.
%                             -Add Form Setup.
%                             -Improve PSTAT message positioning.
%                             -Fix Duplex Printer bug.
%                             -Add PostScript Level 2 control.
%             31 Jan 95  CVP  -Add DMS for LJ 4M+.
%
%%EndComments
%
% EJECT SECTION(Initialize & Define Globals)
%
% *** Create a Working Dictionary ***
%   
%   - () <save>
%
%   (Call 'C' at the end to return to the initial state.)
%
save                                      %Base VM
/$WD 150 dict def $WD begin



% *** SLATE PS Temporary Global Variables (in $WD) ***
%   $V   Vertical Scale (points per current unit)
%   $H   Horizontal Scale (points per current unit)
%   $L   Page Length (current units)
%   $W   Page Width (current units)
%   $O   Orentation (0-3)
%   $T   Tumble (bool)
%   $RC  Form Select Command 
%   $I2  IBM-2 8 Encoding Vector 
%   $R8  Roman 8 Encoding Vector 
%   $WN  Windows Encoding Vector 
%   $N   Working Font Directory
%   $PS  Postscript Level
%   $FP  Front Side (bool)
%   $R   Form Type

% *** Define Globals ***
/$V 1 def
/$H 1 def
/$L 792 def
/$W 612 def
/$O 0 def
/$T false def
/$TMP 40 string def
/$TMP1 40 string def
/$PS /languagelevel where {pop languagelevel} {1} ifelse def
/$FP true def
/$R 0 def

% EJECT SECTION(Error Reporting)

% *** handleerror - Replacement Error Handler ***
%  This replaces the standard proceedure with a
%  proceedure to write error data at the bottom
%  of the page and then execute the old procedure.
%  NOTE: errordict is the current dictionary when
%  executing.
%
errordict /handleerror
 {
  /Courier-Bold findfont 9 scalefont setfont
   initgraphics
   20 153 moveto
   (*** SLATE PostScript Error ***) show
   20 144 moveto
   (  Product: ) show /product where
          {pop product}
          {(Unknown )}
        ifelse show
   (  Version:) show version show
   20 135 moveto
   ( PS Level: ) show /languagelevel where
          {pop languagelevel}
          {1}
        ifelse 20 string cvs show
   (  Setup File: 3.2.0) show        %*********Change Here***********
   20 126 moveto
   (   Error Type: ) show $error /errorname get 20 string cvs show
   20 117 moveto
   (Error Command: ) show $error /command get 20 string cvs show
   20 108 moveto
   (        Stack: ) show 
   $error /ostack get dup length 20 string cvs show
    {currentpoint exch pop 9 sub 80 exch moveto dup 20 string cvs show
     currentpoint exch pop 180 exch moveto
     (\() show type 20 string cvs show (\)) show} 
   forall
   currentpoint exch pop 60 exch moveto (->) show 
   copypage
    } put

% EJECT SECTION(Print Status Functions)
% These functions only work in all Orentations.
% Call STAT to enable printing a status message at
% the bottom right of each page.
%
% *** STAT - Enable Print Status ***
%
%   - STAT -
%
/STAT {/STX {PSTAT} def } bind def 

% *** STX - Print Status ***
%
%   - STX -
%
/STX {} bind def 

% *** PSTAT - Print Status (Internal) ***
%
%   - PSTAT -
%
/PSTAT {save 
      /Courier-Bold findfont 9 $H div scalefont setfont
      $W 324 $H div sub dup () exch H $L 90 $V div sub () exch V
      (         Product: ) show /product where
          {pop product}
          {(Unknown )}
        ifelse show
       (  Version:) show version show
      dup () exch H $L 81 $V div sub () exch V
      (        PS Level: ) show /languagelevel where
          {pop languagelevel}
          {1}
        ifelse 20 string cvs show
       (  Setup File: 3.2.0) show        %*********Change Here***********
      dup () exch H $L 72 $V div sub () exch V
      (       VM Status: Max:) show vmstatus 20 string cvs show
        (  Used:) show 20 string cvs show
        (  Level:) show 20 string cvs show
      dup () exch H $L 63 $V div sub () exch V
      (Oper Stack Count: ) show count 20 string cvs show
      dup () exch H $L 54 $V div sub () exch V
      (Dictionary Count: ) show countdictstack 20 string cvs show
      dup () exch H $L 45 $V div sub () exch V
      (Exec Stack Count: ) show countexecstack 20 string cvs show
      pop restore} bind def

% EJECT SECTION(Setup Operations)

% These operations setup special operations for PostScript
% level 2 systems.
%
  $PS 2 ge
    {% Set Tray & Size Selection
     1 dict dup /Policies 
     2 dict dup /PageSize 2 put
     dup /MediaType 0 put
     put setpagedevice}
   if

% EJECT SECTION(Reset Timeouts)

% *** Set Waittimeout to 0 ***
%  This sets the wait timeout to 0 (to ignore timeout).
% 
  /statusdict where
    {pop statusdict /waittimeout known 
      {statusdict /waittimeout 0 put}
      if}
    if

% *** Set Jobtimeout to 0 ***
%  This sets the job timeout to 0 (to ignore timeout).
% 
  /statusdict where
    {pop statusdict begin /setjobtimeout where 
      {pop 0 setjobtimeout}
      if end}
    if

% *** Set Manualfeedtimeout to 0 ***
%  This sets the maual feed timeout to 0 (to ignore timeout).
% 
  /statusdict where
    {pop statusdict /manualfeedtimeout known 
      {statusdict /manualfeedtimeout 0 put}
      if}
    if

% EJECT SECTION(Form Commmands)
% *** Form Commands ***
%
/$RC [
%-6 DL Envelope
{statusdict begin
  {dlenvelope} stopped pop end
  /$W 312 store /$L 624 store}
%-5 B5 Envelope
{statusdict begin 
  {b5} stopped pop                %For some printers
  {b5envelope} stopped pop end
  /$W 499 store /$L 709 store}
%-4 C5 Envelope
{statusdict begin
  {c5envelope} stopped pop end  
  /$W 459 store /$L 649 store}
%-3 Commercial #10 Envelope
{statusdict begin 
  {com10envelope} stopped pop end
  /$W 297 store /$L 684 store}
%-2 Commercial #9 Envelope
{statusdict begin 
  {com9envelope} stopped pop end
  /$W 279 store /$L 639 store}
%-1 Monarch Envelope
{statusdict begin 
  {monarcenvelope} stopped pop end
  /$W 279 store /$L 540 store}
%0 Letter
{statusdict begin
  {letter} stopped pop end
  /$W 612 store /$L 792 store}
%1 Wide Letter (dummy)
{statusdict begin
  {letter} stopped pop end
  /$W 612 store /$L 792 store}
%2 Legal
{statusdict begin
  {legal} stopped pop end
  /$W 612 store /$L 1008 store}
%3 Executive
{statusdict begin 
  {executivepage} stopped pop end
  /$W 522 store /$L 756 store}
%4 Half Letter (dummy)
{statusdict begin 
  {letter} stopped pop end
  /$W 396 store /$L 612 store}
%5 Ledger/Tabloid
{statusdict begin 
  {11x17} stopped pop end
  /$W 792 store /$L 1224 store}
%6 A3
{statusdict begin
  {a3} stopped pop end
  /$W 842 store /$L 1191 store}
%7 A4
{statusdict begin
  {a4} stopped pop end
  /$W 595 store /$L 842 store}
%8 A5
{statusdict begin
  {a5} stopped pop end
  /$W 420 store /$L 595 store}
%9 B5
{statusdict begin
  {b5} stopped pop end
  /$W 516 store /$L 729 store}
 ] def

% EJECT SECTION(IBM-2 Encloding Vector)
% *** IBM-2 Encoding Vector ***
%
/$I2 [
39/quotesingle
94/circumflex 
96/grave 
126/tilde
128/Ccedilla
129/udieresis
130/eacute
131/acircumflex
132/adieresis
133/agrave
134/aring
135/ccedilla
136/ecircumflex
137/edieresis
138/egrave
139/idieresis
140/icircumflex
141/igrave
142/Adieresis
143/Aring
144/Eacute
145/ae
146/AE
147/ocircumflex
148/odieresis
149/ograve
150/ucircumflex
151/ugrave
152/ydieresis
153/Odieresis
154/Udieresis
155/cent
156/sterling
157/yen
158/Pts
159/florin
160/aacute
161/iacute
162/oacute
163/uacute
164/ntilde
165/Ntilde
166/ordfeminine
167/ordmasculine
168/questiondown
170/logicalnot
171/onehalf
172/onequarter
173/exclamdown
174/guillemotleft
175/guillemotright
225/germandbls
226/Gamma
227/pi
228/Sigma
229/sigma
230/mu
231/tau
232/Phi
233/Theta
234/Omega
235/delta
236/infinity
237/phi
238/epsilon
239/intersection
240/equivalence
241/plusminus
242/greaterequal
243/lessequal
246/divide
247/approxequal
248/degree
249/productdot
250/periodcentered
251/radical
252/nsuperior
253/twosuperior
254/filledbox
] def

% EJECT SECTION(Roman 8 Encloding Vector)
% *** Roman 8 Encoding Vector ***
%
/$R8 [
127/square
161/Agrave
162/Acircumflex
163/Egrave
164/Ecircumflex
165/Edieresis
166/Icircumflex
167/Idieresis
168/acute
169/grave
170/circumflex
171/dieresis
172/tilde
173/Ugrave
174/Ucircumflex
175/sterling
176/overscore
177/Yacute
178/yacute
179/degree
180/Ccedilla
181/ccedilla
182/Ntilde
183/ntilde
184/exclamdown
185/questiondown
186/currency
187/sterling
188/yen
189/section
190/florin
191/cent
192/acircumflex
193/ecircumflex
194/ocircumflex
195/ucircumflex
196/aacute
197/eacute
198/oacute
199/uacute
200/agrave
201/egrave
202/ograve
203/ugrave
204/adieresis
205/edieresis
206/odieresis
207/udieresis
208/Aring
209/icircumflex
210/Oslash
211/AE
212/aring
213/iacute
214/oslash
215/ae
216/Adieresis
217/igrave
218/Odieresis
219/Udieresis
220/Eacute
221/idieresis
222/germandbls
223/Ocircumflex
224/Aacute
225/Atilde
226/atilde
227/Eth
228/eth
229/Iacute
230/Igrave
231/Oacute
232/Ograve
233/Otilde
234/otilde
235/Scaron
236/scaron
237/Uacute
238/Ydieresis
239/ydieresis
240/Thorn
241/thorn
242/periodcentered
243/mu
244/paragraph
245/threequarters
246/minus
247/onequarter
248/onehalf
249/ordfeminine
250/ordmasculine
251/guillemotleft
252/stop
253/guillemotright
254/plusminus
] def

% EJECT SECTION(Windows Encloding Vector)
% *** Windows Encoding Vector ***
%
/$WN [
39/quotesingle
96/grave 
124/bar 
145/quoteleft 
146/quoteright 
147/quotedblleft
148/quotedblright 
149/bullet 
150/endash 
151/emdash 
160/space
164/currency 
166/brokenbar
167/section 
168/dieresis 
169/copyright
170/ordfeminine 
171/guillemotleft 
172/logicalnot 
173/hyphen
174/registered 
175/macron 
176/degree 
177/plusminus 
178/twosuperior
179/threesuperior 
180/acute 
181/mu 
182/paragraph 
183/periodcentered
184/cedilla 
185/onesuperior 
186/ordmasculine 
187/guillemotright
188/onequarter 
189/onehalf 
190/threequarters 
191/questiondown
192/Agrave 
193/Aacute 
194/Acircumflex 
195/Atilde 
196/Adieresis
197/Aring 
198/AE 
199/Ccedilla 
200/Egrave 
201/Eacute 
202/Ecircumflex
203/Edieresis 
204/Igrave 
205/Iacute 
206/Icircumflex 
207/Idieresis
208/Eth 
209/Ntilde 
210/Ograve 
211/Oacute 
212/Ocircumflex
213/Otilde 
214/Odieresis 
215/multiply 
216/Oslash 
217/Ugrave
218/Uacute 
219/Ucircumflex 
220/Udieresis 
221/Yacute 
222/Thorn
223/germandbls 
224/agrave 
225/aacute 
226/acircumflex 
227/atilde
228/adieresis 
229/aring 
230/ae 
231/ccedilla 
232/egrave 
233/eacute
234/ecircumflex 
235/edieresis 
236/igrave 
237/iacute 
238/icircumflex
239/idieresis 
240/eth 
241/ntilde 
242/ograve 
243/oacute 
244/ocircumflex
245/otilde 
246/odieresis 
247/divide 
248/oslash 
249/ugrave
250/uacute 
251/ucircumflex 
252/udieresis 
253/yacute 
254/thorn
255/ydieresis
] def

% EJECT SECTION(Setup & Close)
% *** S - Setup Printer ***
%  Set printer resolution (and working units).
%  (This assumes standard 1/72 in units to start.)
%  Also adjust current page width & length.
%  Save VM to restore at end of page.
%
%   <horz_res> <vert_res> S <save> <save>
%
/S {
 72 exch div /$V exch store
 72 exch div /$H exch store
 /$L $L $V div store /$W $W $H div store
 /$O 0 store
 /$T false store
 save                                     %to Form VM
 $H $V scale 
 save                                     %to Working VM
 () D
 } bind def

% *** LS - Setup Printer (Landscape) ***
%  Set printer resolution (and working units).
%  Change to Landscape Mode.
%  (This assumes standard 1/72 in units to start.)
%  Also adjust current page width & length.
%  Save VM to restore at end of page.
%
%   <horz_res> <vert_res> LS <save> <save>
%
/LS {                       %Form VM
 72 exch div /$V exch store
 72 exch div /$H exch store
 /$L $W /$W $L $V div store $H div store
 /$O 1 store
 /$T true store
 save                                     %to Form VM
 $H $V scale 
 90 rotate
 save                                     %to Working VM
 () D
 } def

% *** DMS - Special DeferredMediaSelection Setup ***
%  Call after the S function if necessary.
%
%   <save> <save> <string> DMS <save> <save>
%
/DMS {
 P
 restore                                  %to Form VM
 $FP                                      %Save $FP
 exch restore                             %to Base VM
 /$FP exch store
 1 dict dup /DeferredMediaSelection true put setpagedevice
 save                                     %to Form VM
 $H $V scale 
 0 0 moveto
 save                                     %to Working VM
 () D
 } def

% *** FS - Setup Form ***
%  Set printer formsize, orentation, and duplex mode 
%  Remove all existing fonts.
%  Also adjust current page width & length.
%  Save VM to restore at end of page.
%
%   <save> <save> <string> <tmb> <oren> <form> FS <save> <save>
%
%   <tmb>     0 to not tumble (long edge bind)
%             1 to tumble     (short edge bind)
%   <oren>    orentation (0-3)
%   <form>    form code
%
/FS {
 4 -1 roll P
 4 -1 roll restore                        %to Form VM
 4 -1 roll restore                        %to Base VM
 /$FP true store 
 dup /$R exch store
 /$RC load exch 6 add get exec
 /$O exch store
 1 eq /$T exch store
 $O 0 eq {$W $L $V div /$L exch store $H div /$W exch store} if
 $O 1 eq {$L $W $V div /$L exch store $H div /$W exch store} if
 $O 2 eq {$W $L $V div /$L exch store $H div /$W exch store} if
 $O 3 eq {$L $W $V div /$L exch store $H div /$W exch store} if
 save                                     %to Form VM
 $H $V scale 
 $O 0 eq {0 rotate} if
 $O 1 eq {90 rotate} if
 $O 2 eq {180 rotate} if
 $O 3 eq {270 rotate} if
 0 0 moveto
 save                                     %to Working VM
 () D
 } bind def

% *** C - Closing Function ***
% (and handle character string.)
% Restore VM from start.  End Working Dictionary.
%
%   <save> <save> <save> <string> C -
%
/C {P restore                             %to Form VM
     /#copies 1 store
     /statusdict where
       {pop statusdict begin
         /manualfeed where 
           {/manualfeed false put} if
         0 {setpapertray} stopped {pop} if
         false {setduplexmode} stopped {pop} if
         false {settumble} stopped {pop} if
         end} if
    restore                               %to Base VM
    end restore                           %to Original VM
    } bind def

% EJECT SECTION(Size & Position)
% *** W - Set Page Width ***
% In current units
% (and handle character string.)
%
%   <save> <string> <page_wid> W <save>
%
/W {exch P
    currentpoint 4 -1 roll restore moveto
    /$W exch store
    save} bind def



% *** L - Set Page Length ***
% In current Units
% (and handle character string.)
%
%   <save> <string> <page_len> L <save>
%
/L {exch P 
    currentpoint 4 -1 roll restore moveto
    /$L exch store
    save} bind def



% *** H - Set Horizontal Position ***
% (In current Units)
% (and handle character string.)
%
%   <string> <horz_pos> H -
%
/H {exch P
  $O 2 eq {$W sub} if
  $O 3 eq {$W sub} if
  currentpoint exch pop moveto} bind def



% *** V - Set Vertical Position ***
% (In current Units)
% (Also convert from current orentation Reference to top Right)
% (and handle character string.)
%
%   <string> <vert_pos> V -
%
/V {exch P 
  $O 0 eq {$L exch sub} if
  $O 1 eq {0 exch sub} if
  $O 2 eq {0 exch sub} if
  $O 3 eq {$L exch sub} if
  currentpoint pop exch moveto} bind def



% *** R - Carriage Return ***
% (and handle character string.)
%
%   <string> R -
%
/R {P currentpoint exch pop 0 exch moveto} bind def



% EJECT SECTION(Page & Bin Select)
% *** N - New Page ***
% (and handle character string.)
%
%   <save> <string> N <save>
%
/N {P STX showpage 
  restore
  /$FP $FP not store 
  save 0 0 moveto} bind def



% *** T - Tray Select ***
% (and handle character string.)
% and print page.
%
%   <save> <string> <tray> <manual> T <save>
%
%   <tray>    0 - n  Tray Number
%            -1      Not Used
%   <manual>  0      Not Manual Feed
%             1      Manual Feed
%            -1      Not Used
%
% NOTE: On some machines, setpapertray resets the CTM and position.  Also
% on some machines, grestore restores the old paper tray.  Thus the
% complex command is necessary for paper tray select.
%
/T {3 -1 roll P
 STX showpage
 3 -1 roll restore 
 /$FP $FP not store 
 /statusdict where
   {pop statusdict begin
     dup -1 eq
       {pop}
       {1 eq /manualfeed exch store}
     ifelse
     dup -1 eq
       {pop}
       {currentpoint matrix currentmatrix 4 -1 roll
         {setpapertray} stopped {pop} if
         setmatrix moveto}
     ifelse  
     end}
   {pop pop}
   ifelse 
 save 0 0 moveto } bind def 



% *** Y - Tray Select (No Page Print) ***
% (and handle character string.)
%
%   <save> <string> <tray> <manual> Y <save>
%
%   <tray>    0 - n  Tray Number
%            -1      Not Used
%   <manual>  0      Not Manual Feed
%             1      Manual Feed
%            -1      Not Used
%
% NOTE: On some machines, setpapertray resets the CTM and position.  Also
% on some machines, grestore restores the old paper tray.  Thus the
% complex command is necessary for paper tray select.
%
/Y {3 -1 roll P
 currentpoint 5 -1 roll restore moveto
 /statusdict where
   {pop statusdict begin
     dup -1 eq
       {pop}
       {1 eq /manualfeed exch store}
     ifelse
     dup -1 eq
       {pop}
       {currentpoint matrix currentmatrix 4 -1 roll
         {setpapertray} stopped {pop} if
         setmatrix moveto}
     ifelse  
     end}
   {pop pop}
   ifelse
   save} bind def

% *** X - Duplex Select ***
% (and handle character string.)
%
%   <save> <string> <dpx> X <save>
%
%   <dpx>     0      Not Duplex
%             1      Duplex
%
% NOTE: On some machines, setduplexmode resets the CTM and position.  Also
% on some machines, grestore restores the old duplex mode tray.  Thus the
% complex command is necessary for duplex select.
%
%
/X {exch P 
    currentpoint 4 -1 roll restore moveto
     /statusdict where
       {pop statusdict begin
         currentpoint matrix currentmatrix 4 -1 roll
         1 eq {setduplexmode} stopped {pop} if
         $T {settumble} stopped {pop} if
         setmatrix moveto end}
       {pop}
     ifelse
   save} bind def



% *** X1 - Duplex Select (special) ***
% (and handle character string.)
%
%   <save> <string> <dpx> X1 <save>
%
%   <dpx>     0      Not Duplex
%             1      Duplex
%
% NOTE: On some machines, setduplexmode resets the CTM and position.  Also
% on some machines, grestore restores the old duplex mode tray.  Thus the
% complex command is necessary for duplex select. 
%
% In addition, there appears to be a bug in the HP/Adobe PostScript
% cartridge causes the printer to hang if we change to duplex on an
% odd page.  This seems to solve most but not all of these problesm.
%
%
/X1 {exch P 
    currentpoint 4 -1 roll restore moveto
     /statusdict where
       {pop statusdict begin
         currentpoint matrix currentmatrix 4 -1 roll
         $FP not {showpage /$FP true store} if 
         1 eq {setduplexmode} stopped {pop} if
         $T {settumble} stopped {pop} if
         setmatrix moveto end}
       {pop}
     ifelse
   save} bind def


% *** O - Set Number of Copies ***
% (and handle character string.)
%
%   <save> <string> <copies> O <save>
%
/O {exch P 
    currentpoint 4 -1 roll restore moveto
    /#copies exch store
    save} bind def



% EJECT SECTION(Print Functions)
% *** P - String Print ***
%  (Force horizontal grid position after each character.)
%
%   <string> P -
%
/P {{pop pop currentpoint exch round exch moveto} exch kshow 
 currentpoint exch round exch moveto} bind def



% *** B - Print Block ***
%  Print Block at current position  (from top left)
%  (and take care of character string.)
%
%   <string> <vert> <horz> <dens> B -
%
/B {4 -1 roll P gsave
 100 exch sub 100 div setgray 
 currentpoint newpath moveto
 dup 0 rlineto
 exch neg 0 exch rlineto
 neg 0 rlineto
 closepath fill grestore} bind def



% *** G - Grey Level Set ***
%  Set grey level (0=white, 100=black)
%  (and handle character string.
%
%   <save> <string> <dens> G <save>
%
/G {exch P 
    currentpoint 4 -1 roll restore moveto
    100 exch sub 100 div setgray
    save} bind def



% *** CO - Color Set ***
%  Set CMYK Color (0=white, 1=Full Color)
%  (and handle character string.
%
%   <save> <string> <cyan> <magenta> <yellow> <black> CO <save>
%
/CO {5 -1 roll P
     currentpoint 7 -1 roll restore moveto
     {setcmykcolor} stopped {pop pop pop pop} if
     save} bind def



% EJECT SECTION(Print Image)
% *** Image Operation ***
%  The IS (Image Start) function sets up the stack.  Slate then
%  builds a HEX image array for one line.  Then IE (Image End)
%  prints the line of data and positions properly.



% *** IS - Image Start ***
%   Setup the stack for subsequent IE call to print a line
%   of image data.  A row of hex image data in the form:
%   {<Hex Data>} should be sent before calling IE.
%   (Also take care of character string.)
%
%   <string> <bytes> <dots> IS <pixels> 
%
/IS {3 -1 roll P
 dup currentpoint 2 copy 5 -1 roll sub moveto gsave translate
 dup scale 8 mul} bind def



% *** CS - Color Image Start ***
%   Setup the stack for subsequent IE call to print a line
%   of image data.  A row of hex image data in the form:
%   {<Hex Data>} should be sent before calling IE.
%   (Also take care of character string.)
%
%   <string> <bytes> <dots> IS <pixels> 
%
/CS {3 -1 roll P
 dup currentpoint 2 copy 5 -1 roll sub moveto gsave translate
 dup scale 2 mul} bind def



% *** IS2 - Image Start (Non Square) ***
%   Setup the stack for subsequent IE call to print a line
%   of image data.  A row of hex image data in the form:
%   {<Hex Data>} should be sent before calling IE.
%   (Also take care of character string.)
%
%   <string> <bytes> <hdots> <vdots> IS <pixels> 
%
/IS2 {4 -1 roll P
 dup currentpoint 2 copy 5 -1 roll sub moveto gsave translate
 scale 8 mul} bind def



% *** IE - Image End ***
%   Print Image data
%
%   <pixels> {<Hex data>} IE -
%
/IE {1 1 matrix 4 -1 roll image grestore} bind def



% *** CE - Color Image End ***
%   Print Image data
%
%   <pixels> {<Hex data>} CE -
%
%   <Hex Data> is the CMYK interleaved data
%
/CE {1 1 matrix 4 -1 roll false 4 colorimage grestore} bind def



% EJECT SECTION(Font Functions)
% *** F - Font Select ***
%  Set current font and size (in points).
%  (and handle character string.)
%
%   <save> <string> <size> <font_name> F <save>
%
%  This is a bit trickey since PostScript Level 1 objects to the
%  font_name object on the stack during the restore.  Copy to 
%  $TMP array in lowest level of VM.
%
/F {3 -1 roll P
    $TMP cvs 
    currentpoint 5 -1 roll restore moveto
    findfont exch $H div scalefont
    setfont
    save
    } bind def



% *** FV - Set new Font Encoding Vector (Internal) ***
%
%   <vector> <new_name> <old_font> FV <new-font>
%
/FV {dup maxlength dict /$N exch def
  {exch dup /FID ne
    {dup /Encoding eq
      {exch dup length array copy $N 3 1 roll put}
      {exch $N 3 1 roll put}
      ifelse}             
    {pop pop}
    ifelse}
  forall
 dup $N /FontName 3 -1 roll put exch aload length 2 idiv
  {$N /Encoding get 3 1 roll put}
  repeat
 $N definefont} bind def



% *** FI - Select IBM-2 Font ***
%  Convert Encoding Vector if necessary. 
%  (and take care of character string.)
%
%   <save> <string> <size> <font_name> <i2_name> FI <save>
%
%  This is a bit trickey since PostScript Level 1 objects to the
%  font_name objects on the stack during the restore.  Copy to 
%  $TMP and $TMP1 arrays in lowest level of VM.
%
/FI {4 -1 roll P
 $TMP cvs exch $TMP1 cvs exch 
 currentpoint 6 -1 roll restore moveto
 dup FontDirectory exch known
  {findfont exch pop}
  {exch findfont $I2 3 1 roll FV}
  ifelse
 exch $H div scalefont setfont
 save} bind def



% *** F8 - Select Roman 8 Font ***
%  Convert Encoding Vector if necessary. 
%  (and take care of character string.)
%
%   <string> <size> <font_name> <r8_name> F8
%
%  This is a bit trickey since PostScript Level 1 objects to the
%  font_name objects on the stack during the restore.  Copy to 
%  $TMP and $TMP1 arrays in lowest level of VM.
%
/F8 {4 -1 roll P
 $TMP cvs exch $TMP1 cvs exch 
 currentpoint 6 -1 roll restore moveto
 dup FontDirectory exch known
  {findfont exch pop}
  {exch findfont $R8 3 1 roll FV}
  ifelse
 exch $H div scalefont setfont
 save} bind def



% *** FW - Select Windows Font ***
%  Convert Encoding Vector if necessary. 
%  (and take care of character string.)
%
%   <string> <size> <font_name> <w_name> FW
%
%  This is a bit trickey since PostScript Level 1 objects to the
%  font_name objects on the stack during the restore.  Copy to 
%  $TMP and $TMP1 arrays in lowest level of VM.
%
/FW {4 -1 roll P
 $TMP cvs exch $TMP1 cvs exch 
 currentpoint 6 -1 roll restore moveto
 dup FontDirectory exch known
  {findfont exch pop}
  {exch findfont $WN 3 1 roll FV}
  ifelse
 exch $H div scalefont setfont
 save} bind def



% *** D - Set Default Font ***
% (and take care of character string.)
%
%   <save> <string> D <save>
%
/D {P 
    currentpoint 3 -1 roll restore moveto
    /Courier findfont 12 $H div scalefont setfont
    save} bind def


% EJECT SECTION(Final Setup)
%*** Final Setup ***/
%
0 0 moveto
/Courier findfont 12 $H div scalefont setfont 
%%EndProlog


Download Driver Pack

How To Update Drivers Manually

After your driver has been downloaded, follow these simple steps to install it.

  • Expand the archive file (if the download file is in zip or rar format).

  • If the expanded file has an .exe extension, double click it and follow the installation instructions.

  • Otherwise, open Device Manager by right-clicking the Start menu and selecting Device Manager.

  • Find the device and model you want to update in the device list.

  • Double-click on it to open the Properties dialog box.

  • From the Properties dialog box, select the Driver tab.

  • Click the Update Driver button, then follow the instructions.

Very important: You must reboot your system to ensure that any driver updates have taken effect.

For more help, visit our Driver Support section for step-by-step videos on how to install drivers for every file type.

server: ftp, load: 2.07