BSD 3 development
[unix-history] / usr / src / cmd / pti.c
CommitLineData
ca8289cc
BJ
1#define DBL 0200
2/*
3C version of pti
4*/
5
6char *ap;
7char ibuf[512];
8char *ibufp = ibuf;
9char *eibufp = ibuf;
10int fid;
11int esc;
12int escd;
13int verd;
14int esct;
15int osize = 02;
16int size = 02;
17int leadtot;
18int railmag;
19int lead;
20int mcase;
21int stab[] = {010,0,01,07,02,03,04,05,0211,06,0212,0213,0214,0215,0216,0217};
22int rtab[] = {6, 7, 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 28, 36, 18};
23char *asctab[128];
24char *spectab[128];
25long offset;
26int lflg;
27int xxx;
28
29main(argc,argv)
30int argc;
31char **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}
158ex(){
159 printf("Total lead %d\n",leadtot);
160 exit(0);
161}
162getc(){
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}
172char *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
284char *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*/