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