Commit | Line | Data |
---|---|---|
2aa6f883 BJ |
1 | static char *sccsid = "@(#)pti.c 4.1 (Berkeley) %G%"; |
2 | #define DBL 0200 | |
3 | /* | |
4 | C version of pti | |
5 | */ | |
6 | ||
7 | char *ap; | |
8 | char ibuf[512]; | |
9 | char *ibufp = ibuf; | |
10 | char *eibufp = ibuf; | |
11 | int fid; | |
12 | int esc; | |
13 | int escd; | |
14 | int verd; | |
15 | int esct; | |
16 | int osize = 02; | |
17 | int size = 02; | |
18 | int leadtot; | |
19 | int railmag; | |
20 | int lead; | |
21 | int mcase; | |
22 | int stab[] = {010,0,01,07,02,03,04,05,0211,06,0212,0213,0214,0215,0216,0217}; | |
23 | int rtab[] = {6, 7, 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 28, 36, 18}; | |
24 | char *asctab[128]; | |
25 | char *spectab[128]; | |
26 | long offset; | |
27 | int lflg; | |
28 | int xxx; | |
29 | ||
30 | main(argc,argv) | |
31 | int argc; | |
32 | char **argv; | |
33 | { | |
34 | register i, j; | |
35 | register char *k; | |
36 | extern ex(); | |
37 | ||
38 | while((--argc > 0) && ((++argv)[0][0]=='-')){ | |
39 | switch(argv[0][1]){ | |
40 | case 'l': | |
41 | lflg++; | |
42 | continue; | |
43 | default: | |
44 | ap = &argv[0][1]; | |
45 | while(((j = *ap++ - '0') >= 0) | |
46 | && (j <= 9))offset = 8*offset +j; | |
47 | continue; | |
48 | } | |
49 | } | |
50 | if(argc){ | |
51 | if((fid=open(argv[0], 0)) < 0){ | |
52 | printf("Cannot open: %s\n",argv[0]); | |
53 | exit(1); | |
54 | } | |
55 | } | |
56 | lseek(fid,offset,0); | |
57 | while((i = getc()) >= 0){ | |
58 | if(i & 0200){ | |
59 | if(!lflg)printf("%o ",i); | |
60 | esc += (~i) & 0177; | |
61 | continue; | |
62 | } | |
63 | if(esc){ | |
64 | if(escd){ | |
65 | if(!lflg)printf("< %d\n",esc); | |
66 | esc = -esc; | |
67 | }else{ | |
68 | if(!lflg)printf("> %d\n",esc); | |
69 | } | |
70 | esct += esc; | |
71 | esc = 0; | |
72 | } | |
73 | if(!lflg)printf("%o ",i); | |
74 | if(!i){if(!lflg)printf("\n"); continue;} | |
75 | switch(i){ | |
76 | case 0100: /*init*/ | |
77 | escd = verd = mcase = railmag = 0; | |
78 | if(!lflg)printf("Initialize\n"); | |
79 | continue; | |
80 | case 0101: /*lower rail*/ | |
81 | railmag &= ~01; | |
82 | if(!lflg)printf("Lower rail\n"); | |
83 | continue; | |
84 | case 0102: /*upper rail*/ | |
85 | railmag |= 01; | |
86 | if(!lflg)printf("Upper rail\n"); | |
87 | continue; | |
88 | case 0103: /*upper mag*/ | |
89 | railmag |= 02; | |
90 | if(!lflg)printf("Upper mag\n"); | |
91 | continue; | |
92 | case 0104: /*lower mag*/ | |
93 | railmag &= ~02; | |
94 | if(!lflg)printf("Lower mag\n"); | |
95 | continue; | |
96 | case 0105: /*lower case*/ | |
97 | mcase = 0; | |
98 | if(!lflg)printf("Lower case\n"); | |
99 | continue; | |
100 | case 0106: /*upper case*/ | |
101 | mcase = 0100; | |
102 | if(!lflg)printf("Upper case\n"); | |
103 | continue; | |
104 | case 0107: /*escape forward*/ | |
105 | escd = 0; | |
106 | if(!lflg)printf("> mode, %d\n",esct); | |
107 | continue; | |
108 | case 0110: /*escape backward*/ | |
109 | escd = 1; | |
110 | if(!lflg)printf("< mode, %d\n",esct); | |
111 | continue; | |
112 | case 0111: /*stop*/ | |
113 | if(!lflg)printf("STOP\n"); | |
114 | continue; | |
115 | case 0112: /*lead forward*/ | |
116 | verd = 0; | |
117 | if(!lflg)printf("Lead forward, %d\n",leadtot); | |
118 | continue; | |
119 | case 0114: /*lead backward*/ | |
120 | verd = 1; | |
121 | if(!lflg)printf("Lead backward, %d\n",leadtot); | |
122 | continue; | |
123 | case 0115: /*undefined*/ | |
124 | if(!lflg)printf("New page\n"); | |
125 | continue; | |
126 | case 0116: | |
127 | lead = 64 * getc(); | |
128 | goto leadin; | |
129 | case 0117: | |
130 | case 0113: | |
131 | if(!lflg)printf("Undefined code\n"); | |
132 | continue; | |
133 | } | |
134 | if((i & 0340) == 0140){ /*leading*/ | |
135 | lead = (~i) & 037; | |
136 | leadin: | |
137 | if(!lflg)printf("Lead %d\n",lead); | |
138 | if(verd)lead = -lead; | |
139 | leadtot += lead; | |
140 | continue; | |
141 | } | |
142 | if((i & 0360) == 0120){ /*size change*/ | |
143 | i &= 017; | |
144 | for(j = 0; i != (stab[j] & 017); j++); | |
145 | osize = size; | |
146 | size = stab[j]; | |
147 | if(!lflg){ | |
148 | printf("Size %d",rtab[j]); | |
149 | if(!(osize & DBL) && (size & DBL))printf(", double\n"); | |
150 | else if((osize & DBL) && !(size & DBL))printf(", single\n"); | |
151 | else printf("\n"); | |
152 | } | |
153 | continue; | |
154 | } | |
155 | if(i & 0300)continue; | |
156 | i = (i & 077) | mcase; | |
157 | if(railmag != 03)k = asctab[i]; | |
158 | else k = spectab[i]; | |
159 | if(!lflg)printf("%s\n",k); | |
160 | continue; | |
161 | } | |
162 | ex(); | |
163 | } | |
164 | ex(){ | |
165 | printf("Total lead %d\n",leadtot); | |
166 | exit(0); | |
167 | } | |
168 | getc(){ | |
169 | register i; | |
170 | ||
171 | if(ibufp >= eibufp){ | |
172 | if((i=read(fid,ibuf,512)) <= 0)ex(); | |
173 | eibufp = ibuf + i; | |
174 | ibufp = ibuf; | |
175 | } | |
176 | return(*ibufp++ & 0377); | |
177 | } | |
178 | char *asctab[128] = { | |
179 | 0, /*blank*/ | |
180 | "h", /*h*/ | |
181 | "t", /*t*/ | |
182 | "n", /*n*/ | |
183 | "m", /*m*/ | |
184 | "l", /*l*/ | |
185 | "i", /*i*/ | |
186 | "z", /*z*/ | |
187 | "s", /*s*/ | |
188 | "d", /*d*/ | |
189 | "b", /*b*/ | |
190 | "x", /*x*/ | |
191 | "f", /*f*/ | |
192 | "j", /*j*/ | |
193 | "u", /*u*/ | |
194 | "k", /*k*/ | |
195 | 0, /*blank*/ | |
196 | "p", /*p*/ | |
197 | "-", /*_ 3/4 em dash*/ | |
198 | ";", /*;*/ | |
199 | 0, /*blank*/ | |
200 | "a", /*a*/ | |
201 | "_", /*rule*/ | |
202 | "c", /*c*/ | |
203 | "`", /*` open*/ | |
204 | "e", /*e*/ | |
205 | "'", /*' close*/ | |
206 | "o", /*o*/ | |
207 | 0, /*1/4*/ | |
208 | "r", /*r*/ | |
209 | 0, /*1/2*/ | |
210 | "v", /*v*/ | |
211 | "-", /*- hyphen*/ | |
212 | "w", /*w*/ | |
213 | "q", /*q*/ | |
214 | "/", /*/*/ | |
215 | ".", /*.*/ | |
216 | "g", /*g*/ | |
217 | 0, /*3/4*/ | |
218 | ",", /*,*/ | |
219 | "&", /*&*/ | |
220 | "y", /*y*/ | |
221 | 0, /*blank*/ | |
222 | "%", /*%*/ | |
223 | 0, /*blank*/ | |
224 | "Q", /*Q*/ | |
225 | "T", /*T*/ | |
226 | "O", /*O*/ | |
227 | "H", /*H*/ | |
228 | "N", /*N*/ | |
229 | "M", /*M*/ | |
230 | "L", /*L*/ | |
231 | "R", /*R*/ | |
232 | "G", /*G*/ | |
233 | "I", /*I*/ | |
234 | "P", /*P*/ | |
235 | "C", /*C*/ | |
236 | "V", /*V*/ | |
237 | "E", /*E*/ | |
238 | "Z", /*Z*/ | |
239 | "D", /*D*/ | |
240 | "B", /*B*/ | |
241 | "S", /*S*/ | |
242 | "Y", /*Y*/ | |
243 | 0, /*blank*/ | |
244 | "F", /*F*/ | |
245 | "X", /*X*/ | |
246 | "A", /*A*/ | |
247 | "W", /*W*/ | |
248 | "J", /*J*/ | |
249 | "U", /*U*/ | |
250 | "K", /*K*/ | |
251 | "0", /*0*/ | |
252 | "1", /*1*/ | |
253 | "2", /*2*/ | |
254 | "3", /*3*/ | |
255 | "4", /*4*/ | |
256 | "5", /*5*/ | |
257 | "6", /*6*/ | |
258 | "7", /*7*/ | |
259 | "8", /*8*/ | |
260 | "9", /*9*/ | |
261 | "*", /***/ | |
262 | "-", /*minus*/ | |
263 | 0, /*fi*/ | |
264 | 0, /*fl*/ | |
265 | 0, /*ff*/ | |
266 | 0, /*cent mark*/ | |
267 | 0, /*ffl*/ | |
268 | 0, /* ffi */ | |
269 | "(", /*(*/ | |
270 | ")", /*)*/ | |
271 | "[", /*[*/ | |
272 | "]", /*]*/ | |
273 | 0, /*degree*/ | |
274 | 0, /*dagger*/ | |
275 | "=", /*=*/ | |
276 | 0, /*registered*/ | |
277 | ":", /*:*/ | |
278 | "+", /*+*/ | |
279 | 0, /*blank*/ | |
280 | "!", /*!*/ | |
281 | 0, /*bullet*/ | |
282 | "?", /*?*/ | |
283 | "'", /*foot mark*/ | |
284 | "|", /*|*/ | |
285 | 0, /*blank*/ | |
286 | 0, /*copyright*/ | |
287 | 0, /*square*/ | |
288 | "$" }; /*$*/ | |
289 | ||
290 | char *spectab[128] = { | |
291 | 0, /*blank*/ | |
292 | 0, /*psi*/ | |
293 | 0, /*theta*/ | |
294 | 0, /*nu*/ | |
295 | 0, /*mu*/ | |
296 | 0, /*lambda*/ | |
297 | 0, /*iota*/ | |
298 | 0, /*zeta*/ | |
299 | 0, /*sigma*/ | |
300 | 0, /*delta*/ | |
301 | 0, /*beta*/ | |
302 | 0, /*xi*/ | |
303 | 0, /*eta*/ | |
304 | 0, /*phi*/ | |
305 | "u", /*upsilon*/ | |
306 | 0, /*kappa*/ | |
307 | 0, /*blank*/ | |
308 | 0, /*pi*/ | |
309 | "@", /*at sign @*/ | |
310 | 0, /*down arrow*/ | |
311 | 0, /*blank*/ | |
312 | 0, /*alpha*/ | |
313 | "|", /*or*/ | |
314 | 0, /*chi*/ | |
315 | "\"", /*"*/ | |
316 | 0, /*epsilon*/ | |
317 | "=", /*equals*/ | |
318 | "o", /*omicron*/ | |
319 | 0, /*left arrow*/ | |
320 | 0, /*rho*/ | |
321 | 0, /*up arrow*/ | |
322 | 0, /*tau*/ | |
323 | "_", /*underrule*/ | |
324 | "\\", /*\*/ | |
325 | 0, /*Psi*/ | |
326 | 0, /*bell system sign*/ | |
327 | 0, /*infinity*/ | |
328 | 0, /*gamma*/ | |
329 | 0, /*improper superset*/ | |
330 | 0, /*proportional to*/ | |
331 | 0, /*right hand*/ | |
332 | 0, /*omega*/ | |
333 | 0, /*blank*/ | |
334 | 0, /*gradient*/ | |
335 | 0, /*blank*/ | |
336 | 0, /*Phi*/ | |
337 | 0, /*Theta*/ | |
338 | 0, /*Omega*/ | |
339 | 0, /*cup (union)*/ | |
340 | 0, /*root en*/ | |
341 | 0, /*terminal sigma*/ | |
342 | 0, /*Lambda*/ | |
343 | "-", /*some horizontal line*/ | |
344 | 0, /*Gamma*/ | |
345 | 0, /*integral sign*/ | |
346 | 0, /*Pi*/ | |
347 | 0, /*subset of*/ | |
348 | 0, /*superset of*/ | |
349 | 0, /*approximates*/ | |
350 | 0, /*partial derivative*/ | |
351 | 0, /*Delta*/ | |
352 | 0, /*square root*/ | |
353 | 0, /*Sigma*/ | |
354 | 0, /*approx =*/ | |
355 | 0, /*blank*/ | |
356 | ">", /*>*/ | |
357 | 0, /*Xi*/ | |
358 | "<", /*<*/ | |
359 | "/", /*slash (longer)*/ | |
360 | 0, /*cap (intersection)*/ | |
361 | "Y", /*Upsilon*/ | |
362 | 0, /*not*/ | |
363 | "|", /*right ceiling (rt of ")*/ | |
364 | "|", /*left top (of big curly)*/ | |
365 | "|", /*bold vertical*/ | |
366 | "|", /*left center of big curly bracket*/ | |
367 | "|", /*left bottom*/ | |
368 | "|", /*right top*/ | |
369 | "|", /*right center of big curly bracket*/ | |
370 | "|", /*right bot*/ | |
371 | "|", /*right floor (rb of ")*/ | |
372 | "|", /*left floor (left bot of big sq bract)*/ | |
373 | "|", /*left ceiling (lt of ")*/ | |
374 | "x", /*multiply*/ | |
375 | 0, /*divide*/ | |
376 | 0, /*plus-minus*/ | |
377 | 0, /*<=*/ | |
378 | 0, /*>=*/ | |
379 | 0, /*identically equal*/ | |
380 | 0, /*not equal*/ | |
381 | "{", /*{*/ | |
382 | "}", /*}*/ | |
383 | "'", /*' acute accent*/ | |
384 | "`", /*` grave accent*/ | |
385 | "^", /*^*/ | |
386 | "#", /*sharp*/ | |
387 | 0, /*left hand*/ | |
388 | 0, /*member of*/ | |
389 | "~", /*~*/ | |
390 | 0, /*empty set*/ | |
391 | 0, /*blank*/ | |
392 | 0, /*dbl dagger*/ | |
393 | "|", /*box rule*/ | |
394 | "*", /*telephone asterisk?*/ | |
395 | 0, /*improper subset*/ | |
396 | 0, /*circle*/ | |
397 | 0, /*blank*/ | |
398 | "+", /*eqn plus sign*/ | |
399 | 0, /*right arrow*/ | |
400 | 0 }; /*section mark*/ |