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