xref: /csrg-svn/old/pti/pti.c (revision 1069)
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