summaryrefslogtreecommitdiff
path: root/dviware/psprint/unix/lw_header.ps
blob: bd6bbac0d1b47332f0dbecc296d360a27abaef9f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
% psprint uses this file to build an appropriate header file for each job.
% It defines @bannerpage and redefines the PostScript error handler.

statusdict begin /waittimeout 300 def end   % wait 5 minutes

/@oldpagecount statusdict begin pagecount end def

/@bannerpage                     % called at end of job or upon error
{ initgraphics
  36 0 translate                 % move origin to the right
  /vpos 800 def                  % initial vertical pos
  0 vpos moveto                  % start near top left corner
  /newline
     { /vpos vpos 20 sub def     % decrease vertical pos by 20pt
       0 vpos moveto             % move to start of new line
     } def
  /Courier findfont              % Courier typewriter font
  12 scalefont setfont           % at 12pt
  (*********************** psprint 3.0 **********************) show newline
  @USER    show newline
  @NODE    show newline
  @FILE    show newline
  @FORMAT  show newline
  @QUEUED  show newline
  (PAGES   : ) show
  statusdict begin
     pagecount                   % current pagecount
  end
  @oldpagecount                  % pagecount saved at start of job
  sub (          ) cvs
           show newline          % show pages printed
  @NOTE    show newline
% @status                        % uncomment to get status info
  /#copies 1 def                 % only 1 copy of banner page
  systemdict /showpage get exec
} def

% Uncomment the following (and above call) to get status info on banner page:
%
% /@oldusertime usertime def       % save current usertime
% /@status                         % show cache and VM status values
% { newline
%   (CACHE STATUS) show newline
%   cachestatus                    % bsize bmax msize mmax csize cmax blimit
%   (blimit = ) show (          ) cvs show newline
%   (cmax   = ) show (          ) cvs show newline
%   (csize  = ) show (          ) cvs show newline
%   (mmax   = ) show (          ) cvs show newline
%   (msize  = ) show (          ) cvs show newline
%   (bmax   = ) show (          ) cvs show newline
%   (bsize  = ) show (          ) cvs show newline
%   newline
%   (VM STATUS) show newline
%   vmstatus                       % savelevel vmused vmmax
%   (vm max     = ) show (          ) cvs show newline
%   (vm used    = ) show (          ) cvs show newline
%   (save level = ) show (          ) cvs show newline
%   newline
%   (JOB TIME (secs) = ) show usertime @oldusertime sub 1000 div
%   (          ) cvs show
% } def

% Redefine the error handler in errordict to show a suitable error message.

/@errpage 64 dict def
@errpage 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 -11 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   % save current error handler
end
% of @errpage

errordict /handleerror                            % redefine error handler
{ systemdict begin $error begin @errpage begin
  newerror
  { /newerror false store
    vmstatus pop pop 0 ne { grestoreall } if
    initgraphics courier setfont
    lmargin 792 moveto
    (POSTSCRIPT ERROR: ) prnt errorname prnt nl
    (OFFENDING COMMAND: ) prnt /command load prnt nl
    $error /ostack known
    { (OPERAND STACK:) prnt nl
      $error /ostack get aload length {==} repeat
    } if
    /#copies 1 store                              % print only one error page
    systemdict /showpage get exec
    userdict begin @bannerpage end                % print banner page
    /newerror true store
    /@oldhandleerror load end end end exec }
  { end end end }
  ifelse
} dup 0 systemdict put dup 4 @errpage put bind readonly put