|
|
1.1 root 1: static char *sccsid = "@(#)pti.c 4.1 (Berkeley) 10/1/80";
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*/
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.