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