[mod.computers.laser-printers] Info-Postscript for Laser Lovers Digest V1 #14

Laser-Lovers-Request@WASHINGTON.ARPA.UUCP (07/20/86)

Info-Postscript for Laser Lovers Digest Saturday, July 19, 1986 7:07PM
Volume 1, Issue 14

Today's Topics:

                                 bind
            revised PostScript downloadable error handler

----------------------------------------------------------------------

From: stew%lhasa.UUCP@harvard.HARVARD.EDU
Date: 	28 Apr 86 10:06 EDT
Subject:  bind

Does anyone know the semantics of the bind operator?  It is not defined
in Inside LaserWriter.  I am trying to fix the Adobe Error Handler routines,
which give a typecheck on the bind on the last line of the file.  Does
anyone have this fixed?

Thanx
Stew
rubenstein@harvard.harvard.edu
seismo!harvard!rubenstein

------------------------------

From: adobe!shore@su-glacier.arpa (Andrew Shore)
Date: 29 Apr 1986 2120-PDT (Tuesday)
Subject: revised PostScript downloadable error handler

Here is our latest version of the downloadable PostScript error
handler (ehandler.ps).  When sent to any PostScript printer, it
will download itself outside the printer's "server loop"
(assuming the server loop password is correct) and redefine the
action taken on a PostScript error. 

This handler prints a sometimes-helpful summary of the error on
the thus-far-completed page and then executes the previous
handleerror code as well (which in most PostScript printers will
echo the error name and offending command over the
communications channel).  This version works on all existing
Adobe PostScript implementations.

It really helps when debugging raw PostScript code and new
PostScript-generating applications.

Enjoy,
--Andy

%!
% lib/ehandler.ps -- Downloaded Error Break-page handler
% Copyright (c) 1984, 1985, 1986 Adobe Systems Incorporated. 
% All Rights Reserved.

0000 % serverloop password
/$brkpage where
{pop pop(Error Handler in place - not loaded again\n)print flush stop}
{dup serverdict begin statusdict begin checkpassword
 {(Error Handler downloaded.\n)print flush exitserver}
 {pop(Bad Password on loading error handler!!!\n)print flush stop}ifelse
}ifelse
/$brkpage 64 dict def $brkpage begin
/prnt
 {dup type/stringtype ne{=string cvs}if dup length 6 mul/tx exch def/ty 10 def
  currentpoint/toy exch def/tox exch def 1 setgray newpath
  tox toy 2 sub moveto 0 ty rlineto tx 0 rlineto 0 ty neg rlineto
  closepath fill tox toy moveto 0 setgray show}bind def
/nl{currentpoint exch pop lmargin exch moveto 0 -10 rmoveto}def
/=={/cp 0 def typeprint nl}def
/typeprint{dup type dup currentdict exch known
  {exec}{unknowntype}ifelse}readonly def
/lmargin 72 def/rmargin 72 def
/tprint{dup length cp add rmargin gt{nl/cp 0 def}if
  dup length cp add/cp exch def prnt}readonly def
/cvsprint{=string cvs tprint( )tprint}readonly def
/unknowntype{exch pop cvlit(??)tprint cvsprint}readonly def
/integertype{cvsprint}readonly def
/realtype{cvsprint}readonly def
/booleantype{cvsprint}readonly def
/operatortype{(//)tprint cvsprint}readonly def
/marktype{pop(-mark- )tprint}readonly def
/dicttype{pop(-dictionary- )tprint}readonly def
/nulltype{pop(-null- )tprint}readonly def
/filetype{pop(-filestream- )tprint}readonly def
/savetype{pop(-savelevel- )tprint}readonly def
/fonttype{pop(-fontid- )tprint}readonly def
/nametype{dup xcheck not{(/)tprint}if cvsprint}readonly def
/stringtype
 {dup rcheck{(\()tprint tprint(\))tprint}{pop(-string- )tprint}ifelse
 }readonly def
/arraytype
 {dup rcheck{dup xcheck
  {({)tprint{typeprint}forall(})tprint}
  {([)tprint{typeprint}forall(])tprint}ifelse}{pop(-array- )tprint}ifelse
 }readonly def
/packedarraytype
 {dup rcheck{dup xcheck
  {({)tprint{typeprint}forall(})tprint}
  {([)tprint{typeprint}forall(])tprint}ifelse}{pop(-packedarray- )tprint}ifelse
 }readonly def
/courier/Courier findfont 10 scalefont def
/OLDhandleerror errordict /handleerror get def
end %$brkpage
errordict/handleerror
 {systemdict begin $error begin $brkpage begin newerror
   {/newerror false store 
    vmstatus pop pop 0 ne{grestoreall}if initgraphics courier setfont
    lmargin 720 moveto(ERROR: )prnt errorname prnt
    nl(OFFENDING COMMAND: )prnt/command load prnt
    $error/ostack 
    known{nl nl(STACK:)prnt nl nl $error/ostack get aload length{==}repeat}if
    systemdict/showpage get exec
    /newerror true store/OLDhandleerror load end end end exec}{end end end}
  ifelse}
dup 0 systemdict put dup 4 $brkpage put bind readonly put

------------------------------

End of Info-Postscript for Laser Lovers Digest
**********************************************