V10/cmd/pti.c

Compare this file to the similar file:
Show the results in this format:

#include <stdio.h>

#define DBL 0200
/*
C version of pti
*/

char *ap;
int esc;
int escd;
int verd;
int esct;
int osize = 02;
int size = 02;
int leadtot;
int railmag;
int lead;
int mcase;
int stab[] = {010,0,01,07,02,03,04,05,0211,06,0212,0213,0214,0215,0216,0217};
int rtab[] = {6, 7, 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 28, 36, 18};

char *asctab[128] = {
"(blank)",	/*blank*/
"h",	/*h*/
"t",	/*t*/
"n",	/*n*/
"m",	/*m*/
"l",	/*l*/
"i",	/*i*/
"z",	/*z*/
"s",	/*s*/
"d",	/*d*/
"b",	/*b*/
"x",	/*x*/
"f",	/*f*/
"j",	/*j*/
"u",	/*u*/
"k",	/*k*/
"(blank)",	/*blank*/
"p",	/*p*/
"em dash",	/*3/4 em dash*/
";",	/*;*/
"(blank)",	/*blank*/
"a",	/*a*/
"_ (baseline)",	/*rule*/
"c",	/*c*/
"` (open)",	/*` open*/
"e",	/*e*/
"' (close)",	/*' close*/
"o",	/*o*/
"1/4",	/*1/4*/
"r",	/*r*/
"1/2",	/*1/2*/
"v",	/*v*/
"hyphen",	/*- hyphen*/
"w",	/*w*/
"q",	/*q*/
"/",	/*/*/
".",	/*.*/
"g",	/*g*/
"3/4",	/*3/4*/
",",	/*,*/
"&",	/*&*/
"y",	/*y*/
"(blank)",	/*blank*/
"%",	/*%*/
"(blank)",	/*blank*/
"Q",	/*Q*/
"T",	/*T*/
"O",	/*O*/
"H",	/*H*/
"N",	/*N*/
"M",	/*M*/
"L",	/*L*/
"R",	/*R*/
"G",	/*G*/
"I",	/*I*/
"P",	/*P*/
"C",	/*C*/
"V",	/*V*/
"E",	/*E*/
"Z",	/*Z*/
"D",	/*D*/
"B",	/*B*/
"S",	/*S*/
"Y",	/*Y*/
"(blank)",	/*blank*/
"F",	/*F*/
"X",	/*X*/
"A",	/*A*/
"W",	/*W*/
"J",	/*J*/
"U",	/*U*/
"K",	/*K*/
"0",	/*0*/
"1",	/*1*/
"2",	/*2*/
"3",	/*3*/
"4",	/*4*/
"5",	/*5*/
"6",	/*6*/
"7",	/*7*/
"8",	/*8*/
"9",	/*9*/
"*",	/***/
"-",	/*minus*/
"fi",	/*fi*/
"fl",	/*fl*/
"ff",	/*ff*/
"cent",	/*cent sign*/
"ffl",	/*ffl*/
"ffi",	/*ffi*/
"(",	/*(*/
")",	/*)*/
"[",	/*[*/
"]",	/*]*/
"degree",	/*degree*/
"dagger",	/*dagger*/
"=",	/*=*/
"registered",	/*registered*/
":",	/*:*/
"+",	/*+*/
"(blank)",	/*blank*/
"!",	/*!*/
"bullet",	/*bullet*/
"?",	/*?*/
"' (foot)",	/*foot mark*/
"|",	/*|*/
"(blank)",	/*blank*/
"copyright",	/*copyright*/
"[]",	/*square*/
"$" };	/*$*/

char *spectab[128] = {
"(blank)",	/*blank*/
"psi",	/*psi*/
"theta",	/*theta*/
"nu",	/*nu*/
"mu",	/*mu*/
"lambda",	/*lambda*/
"iota",	/*iota*/
"zeta",	/*zeta*/
"sigma",	/*sigma*/
"delta",	/*delta*/
"beta",	/*beta*/
"xi",	/*xi*/
"eta",	/*eta*/
"phi",	/*phi*/
"upsilon",	/*upsilon*/
"kappa",	/*kappa*/
"(blank)",	/*blank*/
"pi",	/*pi*/
"@",	/*at-sign*/
"down arrow",	/*down arrow*/
"(blank)",	/*blank*/
"alpha",	/*alpha*/
"| or",	/*or*/
"chi",	/*chi*/
"\"",	/*"*/
"epsilon",	/*epsilon*/
"= math",	/*=*/
"omicron",	/*omicron*/
"left arrow",	/*left arrow*/
"rho",	/*rho*/
"up arrow",	/*up arrow*/
"tau",	/*tau*/
"_ (under)",	/*underrule*/
"\\",	/*\*/
"Psi",	/*Psi*/
"bell system sign",	/*bell system sign*/
"infinity",	/*infinity*/
"gamma",	/*gamma*/
"improper superset",	/*improper superset*/
"proportional to",	/*proportional to*/
"right hand",	/*right hand*/
"omega",	/*omega*/
"(blank)",	/*blank*/
"gradient",	/*gradient*/
"(blank)",	/*blank*/
"Phi",	/*Phi*/
"Theta",	/*Theta*/
"Omega",	/*Omega*/
"cup (union)",	/*cup (union)*/
"root en",	/*root en*/
"terminal sigma",	/*terminal sigma*/
"Lambda",	/*Lambda*/
"- math",	/*minus*/
"Gamma",	/*Gamma*/
"integral sign",	/*integral sign*/
"Pi",	/*Pi*/
"subset of",	/*subset of*/
"superset of",	/*superset of*/
"approximates",	/*approximates*/
"partial",	/*partial derivative*/
"Delta",	/*Delta*/
"square root",	/*square root*/
"Sigma",	/*Sigma*/
"approx =",	/*approx =*/
"(blank)",	/*blank*/
">",	/*>*/
"Xi",	/*Xi*/
"<",	/*<*/
"/ (match \\)",	/*slash (longer)*/
"cap (intersection)",	/*cap (intersection)*/
"Upsilon",	/*Upsilon*/
"not",	/*not*/
"right ceiling",	/*right ceiling (rt of ")*/
"left top curly",	/*left top (of big curly)*/
"bold vertical",	/*bold vertical*/
"left center curley",	/*left center of big curly bracket*/
"left bottom curley",	/*left bottom*/
"right top curley",	/*right top*/
"right center curley",	/*right center of big curly bracket*/
"right bottom curley",	/*right bot*/
"right floor",	/*right floor (rb of ")*/
"left floor",	/*left floor (left bot of big sq bract)*/
"left ceiling",	/*left ceiling (lt of ")*/
"multiply",	/*multiply*/
"divide",	/*divide*/
"+-",	/*plus-minus*/
"<=",	/*<=*/
">=",	/*>=*/
"==",	/*identically equal*/
"not equal",	/*not equal*/
"{",	/*{*/
"}",	/*}*/
"'",	/*' acute accent*/
"`",	/*` grave accent*/
"^",	/*^*/
"#",	/*sharp*/
"left hand",	/*left hand*/
"member of",	/*member of*/
"~",	/*~*/
"empty set",	/*empty set*/
"(blank)",	/*blank*/
"dbl dagger",	/*dbl dagger*/
"| (box rule)",	/*box rule*/
"*",	/*asterisk*/
"improper subset",	/*improper subset*/
"circle",	/*circle*/
"(blank)",	/*blank*/
"+ math",	/*eqn plus*/
"right arrow",	/*right arrow*/
"section mark" };	/*section mark*/

long offset;
int lflg;

main(argc,argv)
int argc;
char **argv;
{
	register i, j;
	register char *k;
	extern ex();

	while((--argc > 0) && ((++argv)[0][0]=='-')){
		switch(argv[0][1]){
			case 'l':
				lflg++;
				continue;
			default:
				ap = &argv[0][1];
				while(((j = *ap++ - '0') >= 0)
					&& (j <= 9))offset = 8*offset +j;
				continue;
		}
	}
	if(argc){
		if (freopen(argv[0], "r", stdin) == NULL) {
			printf("Cannot open: %s\n",argv[0]);
			exit(1);
		}
	}
	if (offset)
		fseek(stdin, offset, 0);
	while((i = getchar()) != EOF){
		if(i & 0200){
			if(!lflg)printf("%o ",i);
			esc += (~i) & 0177;
			continue;
		}
		if(esc){
			if(escd){
				if(!lflg)printf("< %d\n",esc);
				esc = -esc;
			}else{
				if(!lflg)printf("> %d\n",esc);
			}
			esct += esc;
			esc = 0;
		}
		if(!lflg)printf("%o ",i);
		if(!i){if(!lflg)printf("\n"); continue;}
		switch(i){
			case 0100:	/*init*/
				escd = verd = mcase = railmag = 0;
				if(!lflg)printf("Initialize\n");
				continue;
			case 0101:	/*lower rail*/
				railmag &= ~01;
				if(!lflg)printf("Lower rail\n");
				continue;
			case 0102:	/*upper rail*/
				railmag |= 01;
				if(!lflg)printf("Upper rail\n");
				continue;
			case 0103:	/*upper mag*/
				railmag |= 02;
				if(!lflg)printf("Upper mag\n");
				continue;
			case 0104:	/*lower mag*/
				railmag &= ~02;
				if(!lflg)printf("Lower mag\n");
				continue;
			case 0105:	/*lower case*/
				mcase = 0;
				if(!lflg)printf("Lower case\n");
				continue;
			case 0106:	/*upper case*/
				mcase = 0100;
				if(!lflg)printf("Upper case\n");
				continue;
			case 0107:	/*escape forward*/
				escd = 0;
				if(!lflg)printf("> mode, %d\n",esct);
				continue;
			case 0110:	/*escape backward*/
				escd = 1;
				if(!lflg)printf("< mode, %d\n",esct);
				continue;
			case 0111:	/*stop*/
				if(!lflg)printf("STOP\n");
				continue;
			case 0112:	/*lead forward*/
				verd = 0;
				if(!lflg)printf("Lead forward, %d\n",leadtot);
				continue;
			case 0114:	/*lead backward*/
				verd = 1;
				if(!lflg)printf("Lead backward, %d\n",leadtot);
				continue;
			case 0115:	/*undefined*/
			case 0116:
			case 0117:
			case 0113:
				if(!lflg)printf("Undefined code\n");
				continue;
		}
		if((i & 0340) == 0140){	/*leading*/
			lead = (~i) & 037;
			if(!lflg)printf("Lead %d\n",lead);
			if(verd)lead = -lead;
			leadtot += lead;
			continue;
		}
		if((i & 0360) == 0120){	/*size change*/
			i &= 017;
			for(j = 0; i != (stab[j] & 017); j++);
			osize = size;
			size = stab[j];
			if(!lflg){
				printf("Size %d",rtab[j]);
				if(!(osize & DBL) && (size & DBL))printf(", double\n");
				else if((osize & DBL) && !(size & DBL))printf(", single\n");
				else printf("\n");
			}
			continue;
		}
		if(i & 0300)continue;
		i = (i & 077) | mcase;
		if(railmag != 03)k = asctab[i];
		else k = spectab[i];
		if(!lflg)printf("%s\n",k);
		continue;
	}
	ex();
}
ex(){
	printf("Total lead %d\n",leadtot);
	exit(0);
}