[comp.lang.postscript] PostScript Error Dump Routine

lhamey@mqccsunb.mqcc.mq.oz.au (Len Hamey) (08/27/90)

Whilst trying to determine why a particular PS file would not print,
I developed the following error trap routine.  I offer it to the net
freely (you get what you pay for, usually).  I would be interested
in better/improved solutions to the same problem.


% Catch PS error and print out potentially useful info.
% If your PS code fails, just include this at start. Upon failure
% it dumps the current (incomplete) page then prints out two pages
% of error info.
/ErrorStringBuffer 1000 string def
errordict /handleerror
{ showpage
% showpage also initializes graphics state.
  /Times-Roman findfont 12 scalefont setfont
  {
    72 680 moveto
    (Error encountered: ) show
    $error /errorname get ErrorStringBuffer cvs show
    72 660 moveto (Command in error: ) show
    $error /command get ErrorStringBuffer cvs show
    72 640 moveto
    vmstatus (Virtual memory:  max: ) show ErrorStringBuffer cvs show
      (   used: ) show ErrorStringBuffer cvs show
      (   level: ) show ErrorStringBuffer cvs show
    72 600 moveto
    (Context:) show
    1 1 5
    { pop currentpoint 16 sub exch pop 108 exch moveto
      (\%stdin) (r) file ErrorStringBuffer readline exch show
      % Status_of_readline_false_if_end_of_file
      not { exit } if
    } for
    currentpoint 20 sub exch pop 72 exch moveto
    (Execution Stack:) show
    $error /estack get
      length 1 sub  % n-1
      dup 100 sub dup % n-1 n-101 n-101
      0 lt % n-1 n-101 n-101<0
      { 0 } { dup } ifelse % n-1 n-101 max(0,n-101)
      exch pop -1 exch % n-1 -1 max(0,n-101)
      { currentpoint 16 sub exch pop 108 exch moveto
	$error /estack get exch get ErrorStringBuffer cvs show
      } for
  } stopped pop
  showpage
  {
    72 680 moveto
    (Operand Stack:) show
    $error /ostack get
      length 1 sub  % n-1
      dup 100 sub dup % n-1 n-101 n-101
      0 lt % n-1 n-101 n-101<0
      { 0 } { dup } ifelse % n-1 n-101 max(0,n-101)
      exch pop -1 exch % n-1 -1 max(0,n-101)
      { currentpoint 16 sub exch pop 108 exch moveto
	$error /ostack get exch get % Item from operand stack
	dup type ErrorStringBuffer cvs show (: ) show
	ErrorStringBuffer cvs show
      } for
  } stopped pop
  showpage
} put
% The following is a test example of an error...
4 5 6 [1 2 3] (Fred was here) notandexistingoperator morebadstuff
This is a line of text
There is a little more
% A comment line
There follows more
and more


			Len Hamey
			Macquarie University

shiva@well.sf.ca.us (Kenneth Porter) (09/06/90)

An error handler should be available from the ps-file-server:
 
mail ps-file-server@adobe.com
 
send programs ehandler.ps
 
This is also available on the Adobe tools diskette, which I
think costs $6 and also contains a page timer (in PostScript)
and an AFM parser (in C).