xref: /csrg-svn/old/tc/tc.c (revision 39833)
1*39833Sbostic static char *sccsid = "@(#)tc.c	4.4 (Berkeley) 01/02/90";
21121Sbill /*
31121Sbill  * Simulate typesetter on 4014
41121Sbill */
51121Sbill 
637908Sbostic #include <sys/signal.h>
737908Sbostic #include <paths.h>
81121Sbill #include <stdio.h>
91121Sbill 
103943Sroot #define	oput(c) if (pgskip==0) putchar(c); else (c);
111121Sbill #define MAXY 3071
121121Sbill #define US 037
131121Sbill #define GS 035
141121Sbill #define ESC 033
151121Sbill #define FF 014
161121Sbill #define DBL 0200
171121Sbill 
181121Sbill int pl = 11*144;
191121Sbill int mpy = 1;
201121Sbill int div = 1;
211121Sbill char *ap;
221121Sbill int ch;
231121Sbill int nonumb;
241121Sbill int psize = 10;
251121Sbill int dfact = 1;
261121Sbill int esc;
271121Sbill int escd;
281121Sbill int verd;
291121Sbill int esct;
301121Sbill int osize = 02;
311121Sbill int size = 02;
321121Sbill int rx;
331121Sbill int xx;
341121Sbill int yy = MAXY+62+48;
351121Sbill int leadtot = -31;
361121Sbill int ohy = -1;
371121Sbill int ohx = -1;
381121Sbill int oxb = -1;
391121Sbill int oly = -1;
401121Sbill int olx = -1;
411121Sbill int tflag;
421121Sbill int railmag;
431121Sbill int lead;
441121Sbill int skip;
451121Sbill int pgskip;
461121Sbill int ksize = ';';
471121Sbill int mcase;
481121Sbill int stab[] = {010,0,01,07,02,03,04,05,0211,06,0212,0213,0214,0215,0216,0217};
491121Sbill int rtab[] = {6, 7, 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 28, 36, 18};
501121Sbill int ktab[] = {';',';',';',';',';',';',':',':','9','9','9','9','8','8','8','9'};
511121Sbill int first = 1;
521121Sbill int alpha;
531121Sbill extern char *asctab[128];
541121Sbill extern char *spectab[128];
551121Sbill int erase = 1;
56*39833Sbostic sig_t sigint, sigquit;
571121Sbill 
main(argc,argv)581121Sbill main(argc,argv)
591121Sbill int argc;
601121Sbill char **argv;
611121Sbill {
621121Sbill 	register i, j;
631121Sbill 	register char *k;
64*39833Sbostic 	extern void ex();
651121Sbill 
661121Sbill 	while((--argc > 0) && ((++argv)[0][0]=='-')){
671121Sbill 		switch(argv[0][1]){
681121Sbill 			case 'p':
691121Sbill 				ap = &argv[0][2];
701121Sbill 				dfact = 72;
711121Sbill 				if(i = atoi())pl = i/3;
721121Sbill 				continue;
731121Sbill 			case 't':
741121Sbill 				tflag++;
751121Sbill 				continue;
761121Sbill 			case 's':
771121Sbill 				ap = &argv[0][2];
781121Sbill 				dfact = 1;
791121Sbill 				pgskip = atoi();
801121Sbill 				continue;
811121Sbill 			default:
821121Sbill 				dfact = 1;
831121Sbill 				ap = &argv[0][1];
841121Sbill 				if(i = atoi())mpy = i;
851121Sbill 				if(i = atoi())div = i;
861121Sbill 				continue;
871121Sbill 		}
881121Sbill 	}
891121Sbill 	if(argc){
901121Sbill 		if (freopen(argv[0], "r", stdin) == NULL) {
911121Sbill 			fprintf(stderr, "tc: cannot open %s\n", argv[0]);
921121Sbill 			exit(1);
931121Sbill 		}
941121Sbill 	}
951121Sbill 	sigint = signal(SIGINT, ex);
961121Sbill 	sigquit = signal(SIGQUIT, SIG_IGN);
971121Sbill 	while((i = getchar()) != EOF){
981121Sbill 		if(!i)continue;
991121Sbill 		if(i & 0200){
1001121Sbill 			esc += (~i) & 0177;
1011121Sbill 			continue;
1021121Sbill 		}
1031121Sbill 		if(esc){
1041121Sbill 			if(escd)esc = -esc;
1051121Sbill 			esct += esc;
1061121Sbill 			xx += (esc*mpy + rx)/div;
1071121Sbill 			rx = (esc*mpy + rx)%div;
1081121Sbill 			sendpt();
1091121Sbill 			esc = 0;
1101121Sbill 		}
1111121Sbill 		switch(i){
1121121Sbill 			case 0100:	/*init*/
1131121Sbill 				escd = verd = mcase = railmag = xx = 0;
1141121Sbill 				yy = MAXY + 48;
1151121Sbill 				leadtot = -31;
1161121Sbill 				ohy = oxb = oly = ohx = olx = -1;
1171121Sbill 				oput(US);
1181121Sbill 				fflush(stdout);
1191121Sbill 				if(!first && !tflag)kwait();
1201121Sbill 				if(first){
1211121Sbill 					first = 0;
1221121Sbill 					yy += 62;
1231121Sbill 				}
1241121Sbill 				init();
1251121Sbill 				continue;
1261121Sbill 			case 0101:	/*lower rail*/
1271121Sbill 				railmag &= ~01;
1281121Sbill 				continue;
1291121Sbill 			case 0102:	/*upper rail*/
1301121Sbill 				railmag |= 01;
1311121Sbill 				continue;
1321121Sbill 			case 0103:	/*upper mag*/
1331121Sbill 				railmag |= 02;
1341121Sbill 				continue;
1351121Sbill 			case 0104:	/*lower mag*/
1361121Sbill 				railmag &= ~02;
1371121Sbill 				continue;
1381121Sbill 			case 0105:	/*lower case*/
1391121Sbill 				mcase = 0;
1401121Sbill 				continue;
1411121Sbill 			case 0106:	/*upper case*/
1421121Sbill 				mcase = 0100;
1431121Sbill 				continue;
1441121Sbill 			case 0107:	/*escape forward*/
1451121Sbill 				escd = 0;
1461121Sbill 				continue;
1471121Sbill 			case 0110:	/*escape backward*/
1481121Sbill 				escd = 1;
1491121Sbill 				continue;
1501121Sbill 			case 0111:	/*stop*/
1511121Sbill 				continue;
1521121Sbill 			case 0112:	/*lead forward*/
1531121Sbill 				verd = 0;
1541121Sbill 				continue;
1551121Sbill 			case 0113:	/*undefined*/
1561121Sbill 				continue;
1571121Sbill 			case 0114:	/*lead backward*/
1581121Sbill 				verd = 1;
1591121Sbill 				continue;
1601121Sbill 			case 0115:	/*undefined*/
1611121Sbill 			case 0116:
1621121Sbill 			case 0117:
1631121Sbill 				continue;
1641121Sbill 		}
1651121Sbill 		if((i & 0340) == 0140){	/*leading*/
1661121Sbill 			lead = (~i) & 037;
1671121Sbill 			if(verd)lead = -lead;
1681121Sbill 			if((leadtot += lead) > pl){
1691121Sbill 				leadtot = lead;
1701121Sbill 				oput(US);
1711121Sbill 				fflush(stdout);
1721121Sbill 				if(!tflag)kwait();
1731121Sbill 				yy = MAXY;
1741121Sbill 				if(pgskip)--pgskip;
1751121Sbill 				init();
1761121Sbill 				continue;
1771121Sbill 			}
1781121Sbill 			if(skip)continue;
1791121Sbill 			if((yy -= (lead<<1)) < 0){
1801121Sbill 				skip++;
1811121Sbill 				yy = 0;
1821121Sbill 			}else sendpt();
1831121Sbill 			continue;
1841121Sbill 		}
1851121Sbill 		if((i & 0360) == 0120){	/*size change*/
1861121Sbill 			i &= 017;
1871121Sbill 			for(j = 0; i != (stab[j] & 017); j++);
1881121Sbill 			osize = size;
1891121Sbill 			size = stab[j];
1901121Sbill 			psize = rtab[j];
1911121Sbill 			ksize = ktab[j];
1921121Sbill 			oput(ESC);
1931121Sbill 			oput(ksize);
1941121Sbill 			i = 0;
1951121Sbill 			if(!(osize & DBL) && (size & DBL))i = -55;
1961121Sbill 			else if((osize & DBL) && !(size & DBL))i = 55;
1971121Sbill 			if(escd)i = -i;
1981121Sbill 			esc += i;
1991121Sbill 			continue;
2001121Sbill 		}
2011121Sbill 		if(i & 0300)continue;
2021121Sbill 		i = (i & 077) | mcase;
2031121Sbill 		if(railmag != 03)k = asctab[i];
2041121Sbill 		else k = spectab[i];
2051121Sbill 		if(alpha)sendpt();
2061121Sbill 		if(*k!='\0'){
2071121Sbill 			oput(US);
2081121Sbill 			while(*k & 0377)oput(*k++);
2091121Sbill 			alpha++;
2101121Sbill 			continue;
2111121Sbill 		}else{
2121121Sbill 			if(railmag != 03){
2131121Sbill 				switch(i){
2141121Sbill 				case 0124: lig("fi"); break;
2151121Sbill 				case 0125: lig("fl"); break;
2161121Sbill 				case 0126: lig("ff"); break;
2171121Sbill 				case 0130: lig("ffl"); break;
2181121Sbill 				case 0131: lig("ffi"); break;
2191121Sbill 				default: continue;
2201121Sbill 				}
2211121Sbill 			}
2221121Sbill 			continue;
2231121Sbill 		}
2241121Sbill 	}
2251121Sbill 	ex();
2261121Sbill }
lig(x)2271121Sbill lig(x)
2281121Sbill char *x;
2291121Sbill {
2301121Sbill 	register i, j;
2311121Sbill 	register char *k;
2321121Sbill 
2331121Sbill 	j = 0;
2341121Sbill 	k = x;
2351121Sbill 	oput(US);
2361121Sbill 	oput(*k++);
2371121Sbill 	i = psize * 8 * mpy / (div * 6); /* 8/36 em */
2381121Sbill 	while(*k){
2391121Sbill 		xx += i;
2401121Sbill 		j += i;
2411121Sbill 		sendpt();
2421121Sbill 		oput(US);
2431121Sbill 		oput(*k++);
2441121Sbill 	}
2451121Sbill 	xx -= j;
2461121Sbill 	sendpt();
2471121Sbill }
init()2481121Sbill init(){
2491121Sbill 
2501121Sbill 	fflush(stdout);
2511121Sbill 	if(erase){
2521121Sbill 		oput(ESC);
2531121Sbill 		oput(FF);
2541121Sbill 	}else erase = 1;
2551121Sbill 	oput(ESC);
2561121Sbill 	oput(ksize);
2571121Sbill 	/*delay about a second*/
2581121Sbill /* let the system do it...
2591121Sbill 	for(i = 960; i > 0; i--)oput(GS);
2601121Sbill */
2611121Sbill 	skip = 0;
2621121Sbill 	sendpt();
2631121Sbill }
264*39833Sbostic 
265*39833Sbostic void
ex()2661121Sbill ex(){
2671121Sbill 	yy = MAXY;
2681121Sbill 	xx = 0;
2691121Sbill 	sendpt();
2701121Sbill 	oput(ESC);
2711121Sbill 	oput(';');
2721121Sbill 	oput(US);
2731121Sbill 	fflush(stdout);
2741121Sbill 	exit(0);
2751121Sbill }
kwait()2761121Sbill kwait(){
2771121Sbill 	char buf[128]; char *bptr; char c;
2781121Sbill 	if(pgskip) return;
2791121Sbill next:
2801121Sbill 	bptr=buf;
2811121Sbill 	while((c=readch())&&(c!='\n')) *bptr++=c;
2821121Sbill 	*bptr=0;
2831121Sbill 	if(bptr!=buf){
2841121Sbill 		bptr = buf;
2851121Sbill 		if(*bptr == '!'){callunix(&buf[1]); fputs("!\n", stderr); goto next;}
2861121Sbill 		else switch(*bptr++){
2871121Sbill 			case 'e':
2881121Sbill 				erase = 0;
2891121Sbill 				goto next;
2901121Sbill 			case 's':
2911121Sbill 				ap = &buf[1];
2921121Sbill 				dfact = 1;
2931121Sbill 				pgskip = atoi() + 1;
2941121Sbill 				goto next;
2951121Sbill 			default:
2961121Sbill 				fputs("?\n", stderr);
2971121Sbill 				goto next;
2981121Sbill 		}
2991121Sbill 	}
3001121Sbill 	else if (c==0) ex();
3011121Sbill 	else	return;
3021121Sbill }
callunix(line)3031121Sbill callunix(line)
3041121Sbill char line[];
3051121Sbill {
3061121Sbill 	int rc, status, unixpid;
3071121Sbill 	if( (unixpid=fork())==0 ) {
3081121Sbill 		signal(SIGINT,sigint); signal(SIGQUIT,sigquit);
3091121Sbill 		close(0); dup(2);
31037908Sbostic 		execl(_PATH_BSHELL, "-sh", "-c", line, 0);
3111121Sbill 		exit(255);
3121121Sbill 	}
3131121Sbill 	else if(unixpid == -1)
3141121Sbill 		return;
3151121Sbill 	else{	signal(SIGINT, SIG_IGN); signal(SIGQUIT, SIG_IGN);
3161121Sbill 		while( (rc = wait(&status)) != unixpid && rc != -1 ) ;
3171121Sbill 		signal(SIGINT,ex); signal(SIGQUIT,sigquit);
3181121Sbill 	}
3191121Sbill }
readch()3201121Sbill readch(){
3211121Sbill 	char c;
3221121Sbill 	if (read(2,&c,1)<1) c=0;
3231121Sbill 	return(c);
3241121Sbill }
sendpt()3251121Sbill sendpt(){
3261121Sbill 	int hy,xb,ly,hx,lx;
3271121Sbill 
3281121Sbill 	oput(GS);
3291121Sbill 	hy = ((yy>>7) & 037);
3301121Sbill 	xb = ((xx & 03) + ((yy<<2) & 014) & 017);
3311121Sbill 	ly = ((yy>>2) & 037);
3321121Sbill 	hx = ((xx>>7) & 037);
3331121Sbill 	lx = ((xx>>2) & 037);
3341121Sbill 	if(hy != ohy)oput(hy | 040);
3351121Sbill 	if(xb != oxb)oput(xb | 0140);
3361121Sbill 	if((ly != oly) || (hx != ohx) || (xb != oxb))
3371121Sbill 		oput(ly | 0140);
3381121Sbill 	if(hx != ohx)oput(hx | 040);
3391121Sbill 	oput(lx | 0100);
3401121Sbill 	ohy = hy;
3411121Sbill 	oxb = xb;
3421121Sbill 	oly = ly;
3431121Sbill 	ohx = hx;
3441121Sbill 	olx = lx;
3451121Sbill 	alpha = 0;
3461121Sbill 	return;
3471121Sbill }
atoi()3481121Sbill atoi()
3491121Sbill {
3501121Sbill 	register i, j, acc;
3511121Sbill 	int field, digits;
3521121Sbill 	long dd;
3531121Sbill 	long tscale();
3541121Sbill 
3551121Sbill 	field = digits = acc = 0;
3561121Sbill a1:
3571121Sbill 	while(((j = (i = getch()) - '0') >= 0) && (j <= 9)){
3581121Sbill 		field++;
3591121Sbill 		digits++;
3601121Sbill 		acc = 10*acc + j;
3611121Sbill 	}
3621121Sbill 	if(i == '.'){
3631121Sbill 		field++;
3641121Sbill 		digits = 0;
3651121Sbill 		goto a1;
3661121Sbill 	}
3671121Sbill 	if(!(ch = i))ch = 'x';
3681121Sbill 	dd = tscale(acc);
3691121Sbill 	acc = dd;
3701121Sbill 	if((field != digits) && (digits > 0)){
3711121Sbill 		j = 1;
3721121Sbill 		while(digits--)j *= 10;
3731121Sbill 		acc = dd/j;
3741121Sbill 	}
3751121Sbill 	nonumb = !field;
3761121Sbill 	ch = 0;
3771121Sbill 	return(acc);
3781121Sbill }
tscale(n)3791121Sbill long tscale(n)
3801121Sbill int n;
3811121Sbill {
3821121Sbill 	register i, j;
3831121Sbill 
3841121Sbill 	switch(i = getch()){
3851121Sbill 		case 'u':
3861121Sbill 			j = 1;
3871121Sbill 			break;
3881121Sbill 		case 'p':	/*Points*/
3891121Sbill 			j = 6;
3901121Sbill 			break;
3911121Sbill 		case 'i':	/*Inches*/
3921121Sbill 			j = 432;
3931121Sbill 			break;
3941121Sbill 		case 'c':	/*Centimeters; should be 170.0787*/
3951121Sbill 			j = 170;
3961121Sbill 			break;
3971121Sbill 		case 'P':	/*Picas*/
3981121Sbill 			j = 72;
3991121Sbill 			break;
4001121Sbill 		default:
4011121Sbill 			j = dfact;
4021121Sbill 			ch = i;
4031121Sbill 	}
4041121Sbill 	return((long)n*j);
4051121Sbill }
getch()4061121Sbill getch(){
4071121Sbill 	register i;
4081121Sbill 
4091121Sbill 	if(ch){
4101121Sbill 		i = ch;
4111121Sbill 		ch = 0;
4121121Sbill 		return(i);
4131121Sbill 	}
4141121Sbill 	return(*ap++);
4151121Sbill }
4161121Sbill 
4171121Sbill char *asctab[128] = {
4181121Sbill "\0",	/*blank*/
4191121Sbill "h",	/*h*/
4201121Sbill "t",	/*t*/
4211121Sbill "n",	/*n*/
4221121Sbill "m",	/*m*/
4231121Sbill "l",	/*l*/
4241121Sbill "i",	/*i*/
4251121Sbill "z",	/*z*/
4261121Sbill "s",	/*s*/
4271121Sbill "d",	/*d*/
4281121Sbill "b",	/*b*/
4291121Sbill "x",	/*x*/
4301121Sbill "f",	/*f*/
4311121Sbill "j",	/*j*/
4321121Sbill "u",	/*u*/
4331121Sbill "k",	/*k*/
4341121Sbill "\0",	/*blank*/
4351121Sbill "p",	/*p*/
4361121Sbill "-",	/*_ 3/4 em dash*/
4371121Sbill ";",	/*;*/
4381121Sbill "\0",	/*blank*/
4391121Sbill "a",	/*a*/
4401121Sbill "_",	/*rule*/
4411121Sbill "c",	/*c*/
4421121Sbill "`",	/*` open*/
4431121Sbill "e",	/*e*/
4441121Sbill "\'",	/*' close*/
4451121Sbill "o",	/*o*/
4461121Sbill "\0",	/*1/4*/
4471121Sbill "r",	/*r*/
4481121Sbill "\0",	/*1/2*/
4491121Sbill "v",	/*v*/
4501121Sbill "-",	/*- hyphen*/
4511121Sbill "w",	/*w*/
4521121Sbill "q",	/*q*/
4531121Sbill "/",	/*/*/
4541121Sbill ".",	/*.*/
4551121Sbill "g",	/*g*/
4561121Sbill "\0",	/*3/4*/
4571121Sbill ",",	/*,*/
4581121Sbill "&",	/*&*/
4591121Sbill "y",	/*y*/
4601121Sbill "\0",	/*blank*/
4611121Sbill "%",	/*%*/
4621121Sbill "\0",	/*blank*/
4631121Sbill "Q",	/*Q*/
4641121Sbill "T",	/*T*/
4651121Sbill "O",	/*O*/
4661121Sbill "H",	/*H*/
4671121Sbill "N",	/*N*/
4681121Sbill "M",	/*M*/
4691121Sbill "L",	/*L*/
4701121Sbill "R",	/*R*/
4711121Sbill "G",	/*G*/
4721121Sbill "I",	/*I*/
4731121Sbill "P",	/*P*/
4741121Sbill "C",	/*C*/
4751121Sbill "V",	/*V*/
4761121Sbill "E",	/*E*/
4771121Sbill "Z",	/*Z*/
4781121Sbill "D",	/*D*/
4791121Sbill "B",	/*B*/
4801121Sbill "S",	/*S*/
4811121Sbill "Y",	/*Y*/
4821121Sbill "\0",	/*blank*/
4831121Sbill "F",	/*F*/
4841121Sbill "X",	/*X*/
4851121Sbill "A",	/*A*/
4861121Sbill "W",	/*W*/
4871121Sbill "J",	/*J*/
4881121Sbill "U",	/*U*/
4891121Sbill "K",	/*K*/
4901121Sbill "0",	/*0*/
4911121Sbill "1",	/*1*/
4921121Sbill "2",	/*2*/
4931121Sbill "3",	/*3*/
4941121Sbill "4",	/*4*/
4951121Sbill "5",	/*5*/
4961121Sbill "6",	/*6*/
4971121Sbill "7",	/*7*/
4981121Sbill "8",	/*8*/
4991121Sbill "9",	/*9*/
5001121Sbill "*",	/***/
5011121Sbill "-",	/*minus*/
5021121Sbill "",	/*fi*/
5031121Sbill "",	/*fl*/
5041121Sbill "",	/*ff*/
5051121Sbill "\033\016Z\bM\033\017",	/*cent sign*/
5061121Sbill "",	/*ffl*/
5071121Sbill "",	/*ffi*/
5081121Sbill "(",	/*(*/
5091121Sbill ")",	/*)*/
5101121Sbill "[",	/*[*/
5111121Sbill "]",	/*]*/
5121121Sbill "\033\016J\033\017",	/*degree*/
5131121Sbill "\033\016M\b_\033\017",	/*dagger*/
5141121Sbill "=",	/*=*/
5151121Sbill "\033\016O\b&\033\017",	/*registered*/
5161121Sbill ":",	/*:*/
5171121Sbill "+",	/*+*/
5181121Sbill "\0",	/*blank*/
5191121Sbill "!",	/*!*/
5201121Sbill "\033\016O\b~\033\017",	/*bullet*/
5211121Sbill "?",	/*?*/
5221121Sbill "\'",	/*foot mark*/
5231121Sbill "|",	/*|*/
5241121Sbill "\0",	/*blank*/
5251121Sbill "\033\016O\b#\033\017",	/*copyright*/
5261121Sbill "\033\016L\033\017",	/*square*/
5271121Sbill "$" };	/*$*/
5281121Sbill 
5291121Sbill char *spectab[128] = {
5301121Sbill "\0",	/*blank*/
5311121Sbill "\033\016(\bM\033\017",	/*psi*/
5321121Sbill "\033\016o\b_\033\017",	/*theta*/
5331121Sbill "v\b)",	/*nu*/
5341121Sbill "\033\016V\b,\033\017",	/*mu*/
5351121Sbill "\033\016)\b?\033\017",	/*lambda*/
5361121Sbill "\033\016I\033\017",	/*iota*/
5371121Sbill "S\b\033\016Z\033\017",	/*zeta*/
5381121Sbill "o\b\'",	/*sigma*/
5391121Sbill "o\b\033\0165\033\017",	/*delta*/
5401121Sbill "\033\016b\033\017",	/*beta*/
5411121Sbill "\033\016e\bc\033\017",	/*xi*/
5421121Sbill "j\b\033\016C\033\017",	/*eta*/
5431121Sbill "\033\016O\bM\033\017",	/*phi*/
5441121Sbill "\033\016(\033\017",	/*upsilon*/
5451121Sbill "\033\016k\033\017",	/*kappa*/
5461121Sbill "\0",	/*blank*/
5471121Sbill "T\b\033\016S\033\017",	/*pi*/
5481121Sbill "@",	/*at-sign*/
5491121Sbill "\033\016U\033\017",	/*down arrow*/
5501121Sbill "\0",	/*blank*/
5511121Sbill "\033\016A\033\017",	/*alpha*/
5521121Sbill "|",	/*or*/
5531121Sbill "l\b/",	/*chi*/
5541121Sbill "\"",	/*"*/
5551121Sbill "\033\016E\033\017",	/*epsilon*/
5561121Sbill "=",	/*=*/
5571121Sbill "\033\016O\033\017",	/*omicron*/
5581121Sbill "\033\016[\033\017",	/*left arrow*/
5591121Sbill "\033\016R\033\017",	/*rho*/
5601121Sbill "\033\016Y\033\017",	/*up arrow*/
5611121Sbill "\033\016N\033\017",	/*tau*/
5621121Sbill "_",	/*underrule*/
5631121Sbill "\\",	/*\*/
5641121Sbill "I\b\033\016(\033\017",	/*Psi*/
5651121Sbill "\033\016O\bJ\033\017",	/*bell system sign*/
5661121Sbill "\033\016W\bX\033\017",	/*infinity*/
5671121Sbill "`\b/",	/*gamma*/
5681121Sbill "\033\016X\bF\033\017",	/*improper superset*/
5691121Sbill "\033\016A\033\017",	/*proportional to*/
5701121Sbill "\033\016\\\b]\033\017",	/*right hand*/
5711121Sbill "\033\016W\033\017",	/*omega*/
5721121Sbill "\0",	/*blank*/
5731121Sbill "\033\016G\033\017",	/*gradient*/
5741121Sbill "\0",	/*blank*/
5751121Sbill "I\033\016\bO\033\017",	/*Phi*/
5761121Sbill "O\b=",	/*Theta*/
5771121Sbill "O\b_",	/*Omega*/
5781121Sbill "\033\016V\033\017",	/*cup (union)*/
5791121Sbill "\033\016@\033\017",	/*root en*/
5801121Sbill "s",	/*terminal sigma*/
5811121Sbill "\033\016)\bK\033\017",	/*Lambda*/
5821121Sbill "-",	/*minus*/
5831121Sbill "\033\016S\bK\033\017",	/*Gamma*/
5841121Sbill "\033\016i\033\017",	/*integral sign*/
5851121Sbill "\033\016t\b'\033\017",	/*Pi*/
5861121Sbill "\033\016Z\033\017",	/*subset of*/
5871121Sbill "\033\016X\033\017",	/*superset of*/
5881121Sbill "\033\016T\033\017",	/*approximates*/
5891121Sbill "o\b`",	/*partial derivative*/
5901121Sbill "\033\016H\033\017",	/*Delta*/
5911121Sbill "\033\016I\b'\033\017",	/*square root*/
5921121Sbill ">\b\033\016F\b@\033\017",	/*Sigma*/
5931121Sbill "\033\016T\bF\033\017",	/*approx =*/
5941121Sbill "\0",	/*blank*/
5951121Sbill ">",	/*>*/
5961121Sbill "\033\016_\bF\b@\033\017",	/*Xi*/
5971121Sbill "<",	/*<*/
5981121Sbill "/",	/*slash (longer)*/
5991121Sbill "\033\016C\033\017",	/*cap (intersection)*/
6001121Sbill "\033\016y\033\017",	/*Upsilon*/
6011121Sbill "\033\016|\033\017",	/*not*/
6021121Sbill "|",	/*right ceiling (rt of ")*/
6031121Sbill "|",	/*left top (of big curly)*/
6041121Sbill "|",	/*bold vertical*/
6051121Sbill "|",	/*left center of big curly bracket*/
6061121Sbill "|",	/*left bottom*/
6071121Sbill "|",	/*right top*/
6081121Sbill "|",	/*right center of big curly bracket*/
6091121Sbill "|",	/*right bot*/
6101121Sbill "|",	/*right floor (rb of ")*/
6111121Sbill "|",	/*left floor (left bot of big sq bract)*/
6121121Sbill "|",	/*left ceiling (lt of ")*/
6131121Sbill "\033\016=\033\017",	/*multiply*/
6141121Sbill "\033\016+\033\017",	/*divide*/
6151121Sbill "+\b_",	/*plus-minus*/
6161121Sbill "\033\016$\033\017",	/*<=*/
6171121Sbill "\033\016^\033\017",	/*>=*/
6181121Sbill "=\b_",	/*identically equal*/
6191121Sbill "\033\016*\033\017",	/*not equal*/
6201121Sbill "{",	/*{*/
6211121Sbill "}",	/*}*/
6221121Sbill "\'",	/*' acute accent*/
6231121Sbill "`",	/*` grave accent*/
6241121Sbill "^",	/*^*/
6251121Sbill "#",	/*sharp*/
6261121Sbill "\033\016|\b[\033\017",	/*left hand*/
6271121Sbill "\033\016c\b_\033\017",	/*member of*/
6281121Sbill "~",	/*~*/
6291121Sbill "\033\016O\b/\033\017",	/*empty set*/
6301121Sbill "\0",	/*blank*/
6311121Sbill "\033\016%\bM\033\017",	/*dbl dagger*/
6321121Sbill "|",	/*box rule*/
6331121Sbill "*",	/*asterisk*/
6341121Sbill "\033\016Z\bF\033\017",	/*improper subset*/
6351121Sbill "\033\016O\033\017",	/*circle*/
6361121Sbill "\0",	/*blank*/
6371121Sbill "+",	/*eqn plus*/
6381121Sbill "\033\016]\033\017",	/*right arrow*/
6391121Sbill "g\b\033\016C\033\017" };	/*section mark*/
640