[comp.lang.postscript] Postscript Lint/Syntax checker

pfranzon@augean.OZ (Paul Franzon) (02/10/88)

We occasionally program in postscript for output on our Laserwriter.
Unfortunately, the only way we have of debugging the postscript program
is to try to print it, which becomes very frustrating when the output
becomes a blank page.

Does anyone out there have a postscript Lint or syntax checker, or
alternatively, have a program to intercept the error messages from the
Laserwriter?

Thanks in advance,

Paul Franzon
Electrical and Electronic Engineering
University of Adelaide
Adelaide SA 5001
Australia

BEC.HEFFRON@ECLA.USC.EDU (Matt Heffron) (02/17/88)

Here is a PostScript error handler that was posted to Laser-lovers a while
back, it installs itself outside of the server loop and then traps all errors
printing the partial page and the error, offending command, and the stack.
enjoy.
- Matt Heffron		BEC.HEFFRON@ECLA.USC.EDU
---------------- cut here ------------------------
%!
% 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

-------

greely@teak.cis.ohio-state.edu (J Greely) (02/18/88)

An error-handler for PostScript devices is included as part of the
TransScript package from Adobe.  I am not sure of the status, as regards
to distribution, but you can probably contact them and find out.

  The program is downloaded to the printer, installs itself, and from
then on, all PostScript programs containing an error will print up to
the error, and part of the page containing the error will be used for
printing the offending line and the contents of the stack.

-=-
				      -j,  greely@satcom3.cis.ohio-state.edu
"Tandoori to go.  That's all they went out for, these people... Tandoori
 to go... and *instead*, they... they got..."  -- Watchmen
 -----

dennis@cod.NOSC.MIL (Dennis Cottel) (02/23/88)

Why can't a PostScript error reporter tell you what line the error
occurred on?  At least, I haven't seen one which does this.

   Dennis Cottel  Naval Ocean Systems Center, San Diego, CA  92152
   (619) 553-1645     dennis@NOSC.MIL       sdcsvax!noscvax!dennis