|
|
1.1 root 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*/
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.