Blame


1 13f7391e 2004-05-15 devnull %
2 13f7391e 2004-05-15 devnull % Redefiniton of the PostScript file output operators so results go to paper.
3 13f7391e 2004-05-15 devnull % Complicated and slow, but the implementation doesn't place many demands on
4 13f7391e 2004-05-15 devnull % included PostScript. About all that's required is gentle treatment of the
5 13f7391e 2004-05-15 devnull % graphics state between write calls.
6 13f7391e 2004-05-15 devnull %
7 13f7391e 2004-05-15 devnull
8 13f7391e 2004-05-15 devnull /#copies 1 store
9 13f7391e 2004-05-15 devnull /aspectratio 1 def
10 13f7391e 2004-05-15 devnull /font /Courier def
11 13f7391e 2004-05-15 devnull /formsperpage 1 def
12 13f7391e 2004-05-15 devnull /landscape false def
13 13f7391e 2004-05-15 devnull /magnification 1 def
14 13f7391e 2004-05-15 devnull /orientation 0 def
15 13f7391e 2004-05-15 devnull /pointsize 10 def
16 13f7391e 2004-05-15 devnull /rotation 1 def
17 13f7391e 2004-05-15 devnull /xoffset .1 def
18 13f7391e 2004-05-15 devnull /yoffset .1 def
19 13f7391e 2004-05-15 devnull
20 13f7391e 2004-05-15 devnull /roundpage true def
21 13f7391e 2004-05-15 devnull /useclippath true def
22 13f7391e 2004-05-15 devnull /pagebbox [0 0 612 792] def
23 13f7391e 2004-05-15 devnull
24 13f7391e 2004-05-15 devnull /inch {72 mul} def
25 13f7391e 2004-05-15 devnull /min {2 copy gt {exch} if pop} def
26 13f7391e 2004-05-15 devnull
27 13f7391e 2004-05-15 devnull /HardcopySetup {
28 13f7391e 2004-05-15 devnull landscape {/orientation 90 orientation add def} if
29 13f7391e 2004-05-15 devnull font findfont 1 1.1 div scalefont setfont
30 13f7391e 2004-05-15 devnull
31 13f7391e 2004-05-15 devnull pagedimensions
32 13f7391e 2004-05-15 devnull xcenter ycenter translate
33 13f7391e 2004-05-15 devnull orientation rotation mul rotate
34 13f7391e 2004-05-15 devnull width 2 div neg height 2 div translate
35 13f7391e 2004-05-15 devnull xoffset inch yoffset inch neg translate
36 13f7391e 2004-05-15 devnull pointsize 1.1 mul dup scale
37 13f7391e 2004-05-15 devnull magnification dup aspectratio mul scale
38 13f7391e 2004-05-15 devnull height width div 1 min dup scale
39 13f7391e 2004-05-15 devnull 0 -1 translate
40 13f7391e 2004-05-15 devnull 0 0 moveto
41 13f7391e 2004-05-15 devnull } def
42 13f7391e 2004-05-15 devnull
43 13f7391e 2004-05-15 devnull /pagedimensions {
44 13f7391e 2004-05-15 devnull useclippath {
45 13f7391e 2004-05-15 devnull /pagebbox [clippath pathbbox newpath] def
46 13f7391e 2004-05-15 devnull roundpage currentdict /roundpagebbox known and {roundpagebbox} if
47 13f7391e 2004-05-15 devnull } if
48 13f7391e 2004-05-15 devnull pagebbox aload pop
49 13f7391e 2004-05-15 devnull 4 -1 roll exch 4 1 roll 4 copy
50 13f7391e 2004-05-15 devnull landscape {4 2 roll} if
51 13f7391e 2004-05-15 devnull sub /width exch def
52 13f7391e 2004-05-15 devnull sub /height exch def
53 13f7391e 2004-05-15 devnull add 2 div /xcenter exch def
54 13f7391e 2004-05-15 devnull add 2 div /ycenter exch def
55 13f7391e 2004-05-15 devnull } def
56 13f7391e 2004-05-15 devnull
57 13f7391e 2004-05-15 devnull %
58 13f7391e 2004-05-15 devnull % Unbind the operators in an executable array or packedarray. Leaves the
59 13f7391e 2004-05-15 devnull % unbound array or the original object on the stack.
60 13f7391e 2004-05-15 devnull %
61 13f7391e 2004-05-15 devnull
62 13f7391e 2004-05-15 devnull /Unbind {
63 13f7391e 2004-05-15 devnull 0 index xcheck
64 13f7391e 2004-05-15 devnull 1 index type /arraytype eq
65 13f7391e 2004-05-15 devnull 2 index type /packedarraytype eq or and {
66 13f7391e 2004-05-15 devnull dup length array copy cvx
67 13f7391e 2004-05-15 devnull dup 0 exch {
68 13f7391e 2004-05-15 devnull dup type /operatortype eq {
69 13f7391e 2004-05-15 devnull ( ) cvs cvn cvx
70 13f7391e 2004-05-15 devnull } if
71 13f7391e 2004-05-15 devnull
72 13f7391e 2004-05-15 devnull dup type /dicttype eq {
73 13f7391e 2004-05-15 devnull dup maxlength dict exch {
74 13f7391e 2004-05-15 devnull Unbind
75 13f7391e 2004-05-15 devnull 3 copy put pop pop
76 13f7391e 2004-05-15 devnull } forall
77 13f7391e 2004-05-15 devnull } if
78 13f7391e 2004-05-15 devnull
79 13f7391e 2004-05-15 devnull 0 index xcheck
80 13f7391e 2004-05-15 devnull 1 index type /arraytype eq
81 13f7391e 2004-05-15 devnull 2 index type /packedarraytype eq or and {
82 13f7391e 2004-05-15 devnull Unbind
83 13f7391e 2004-05-15 devnull } if
84 13f7391e 2004-05-15 devnull
85 13f7391e 2004-05-15 devnull 3 copy put pop
86 13f7391e 2004-05-15 devnull 1 add
87 13f7391e 2004-05-15 devnull } forall
88 13f7391e 2004-05-15 devnull pop
89 13f7391e 2004-05-15 devnull } if
90 13f7391e 2004-05-15 devnull } def
91 13f7391e 2004-05-15 devnull
92 13f7391e 2004-05-15 devnull %
93 13f7391e 2004-05-15 devnull % New write operator - don't bind the definition! Expands tabs and backspaces,
94 13f7391e 2004-05-15 devnull % wraps long lines, and starts a new page whenever necessary. The code that
95 13f7391e 2004-05-15 devnull % handles newlines assumes lines are separated by one vertical unit.
96 13f7391e 2004-05-15 devnull %
97 13f7391e 2004-05-15 devnull
98 13f7391e 2004-05-15 devnull /write {
99 13f7391e 2004-05-15 devnull true exch
100 13f7391e 2004-05-15 devnull
101 13f7391e 2004-05-15 devnull %%case '\b':
102 13f7391e 2004-05-15 devnull dup 8#10 eq {
103 13f7391e 2004-05-15 devnull ( ) stringwidth pop neg 0 rmoveto
104 13f7391e 2004-05-15 devnull currentpoint pop 0 lt {
105 13f7391e 2004-05-15 devnull currentpoint exch pop 0 exch moveto
106 13f7391e 2004-05-15 devnull } if
107 13f7391e 2004-05-15 devnull exch pop false exch
108 13f7391e 2004-05-15 devnull } if
109 13f7391e 2004-05-15 devnull
110 13f7391e 2004-05-15 devnull %%case '\t':
111 13f7391e 2004-05-15 devnull dup 8#11 eq {
112 13f7391e 2004-05-15 devnull currentpoint pop ( ) stringwidth pop div round cvi
113 13f7391e 2004-05-15 devnull 8 mod 8 exch sub {
114 13f7391e 2004-05-15 devnull 2 index 8#40 write
115 13f7391e 2004-05-15 devnull } repeat
116 13f7391e 2004-05-15 devnull exch pop false exch
117 13f7391e 2004-05-15 devnull } if
118 13f7391e 2004-05-15 devnull
119 13f7391e 2004-05-15 devnull %%case '\n':
120 13f7391e 2004-05-15 devnull dup 8#12 eq {
121 13f7391e 2004-05-15 devnull currentpoint 0 exch 1 sub moveto pop
122 13f7391e 2004-05-15 devnull
123 13f7391e 2004-05-15 devnull gsave clippath pathbbox pop pop exch pop grestore
124 13f7391e 2004-05-15 devnull currentpoint exch pop 1 sub ge {
125 13f7391e 2004-05-15 devnull 2 index 8#14 write
126 13f7391e 2004-05-15 devnull } if
127 13f7391e 2004-05-15 devnull exch pop false exch
128 13f7391e 2004-05-15 devnull } if
129 13f7391e 2004-05-15 devnull
130 13f7391e 2004-05-15 devnull %%case '\f':
131 13f7391e 2004-05-15 devnull dup 8#14 eq {
132 13f7391e 2004-05-15 devnull gsave showpage grestore
133 13f7391e 2004-05-15 devnull 0 0 moveto
134 13f7391e 2004-05-15 devnull exch pop false exch
135 13f7391e 2004-05-15 devnull } if
136 13f7391e 2004-05-15 devnull
137 13f7391e 2004-05-15 devnull %%case '\r':
138 13f7391e 2004-05-15 devnull dup 8#15 eq {
139 13f7391e 2004-05-15 devnull currentpoint 0 exch moveto pop
140 13f7391e 2004-05-15 devnull exch pop false exch
141 13f7391e 2004-05-15 devnull } if
142 13f7391e 2004-05-15 devnull
143 13f7391e 2004-05-15 devnull %%case EOF:
144 13f7391e 2004-05-15 devnull dup -1 eq {
145 13f7391e 2004-05-15 devnull currentpoint 0 ne exch 0 ne or {
146 13f7391e 2004-05-15 devnull 2 index 8#14 write
147 13f7391e 2004-05-15 devnull } if
148 13f7391e 2004-05-15 devnull exch pop false exch
149 13f7391e 2004-05-15 devnull } if
150 13f7391e 2004-05-15 devnull
151 13f7391e 2004-05-15 devnull %%default:
152 13f7391e 2004-05-15 devnull exch {
153 13f7391e 2004-05-15 devnull dup
154 13f7391e 2004-05-15 devnull gsave clippath pathbbox pop 3 1 roll pop pop grestore
155 13f7391e 2004-05-15 devnull ( ) stringwidth pop currentpoint pop add le {
156 13f7391e 2004-05-15 devnull 2 index 8#12 write
157 13f7391e 2004-05-15 devnull } if
158 13f7391e 2004-05-15 devnull ( ) dup 0 4 -1 roll put show
159 13f7391e 2004-05-15 devnull } if
160 13f7391e 2004-05-15 devnull
161 13f7391e 2004-05-15 devnull pop % the character
162 13f7391e 2004-05-15 devnull pop % and file object
163 13f7391e 2004-05-15 devnull } def
164 13f7391e 2004-05-15 devnull
165 13f7391e 2004-05-15 devnull %
166 13f7391e 2004-05-15 devnull % All the other file output operators call our redefined write operator.
167 13f7391e 2004-05-15 devnull %
168 13f7391e 2004-05-15 devnull
169 13f7391e 2004-05-15 devnull /print {
170 13f7391e 2004-05-15 devnull (%stdout) (w) file exch {1 index exch write} forall
171 13f7391e 2004-05-15 devnull pop
172 13f7391e 2004-05-15 devnull } def
173 13f7391e 2004-05-15 devnull
174 13f7391e 2004-05-15 devnull /writestring {
175 13f7391e 2004-05-15 devnull {1 index exch write} forall
176 13f7391e 2004-05-15 devnull pop
177 13f7391e 2004-05-15 devnull } def
178 13f7391e 2004-05-15 devnull
179 13f7391e 2004-05-15 devnull /writehexstring {
180 13f7391e 2004-05-15 devnull (0123456789ABCDEF) 3 1 roll {
181 13f7391e 2004-05-15 devnull dup
182 13f7391e 2004-05-15 devnull 3 index exch -4 bitshift 16#F and get 2 index exch write
183 13f7391e 2004-05-15 devnull 2 index exch 16#F and get 1 index exch write
184 13f7391e 2004-05-15 devnull } forall
185 13f7391e 2004-05-15 devnull pop pop
186 13f7391e 2004-05-15 devnull } def
187 13f7391e 2004-05-15 devnull
188 13f7391e 2004-05-15 devnull %
189 13f7391e 2004-05-15 devnull % Unbind and redefine the remaining file output procedures.
190 13f7391e 2004-05-15 devnull %
191 13f7391e 2004-05-15 devnull
192 13f7391e 2004-05-15 devnull /= dup load Unbind def
193 13f7391e 2004-05-15 devnull /== dup load Unbind def
194 13f7391e 2004-05-15 devnull /stack dup load Unbind def
195 13f7391e 2004-05-15 devnull /pstack dup load Unbind def
196 13f7391e 2004-05-15 devnull