Bell 32V release
[unix-history] / usr / src / cmd / pcat.c
CommitLineData
3fcad733
TL
1#include <signal.h>
2#define X 0
3/*
4C version of tcatsim
5*/
6
7#define OBSZ 512
8#define MAXY 3071
9#define US 037
10#define GS 035
11#define ESC 033
12#define FF 014
13#define SO 016
14#define SI 017
15#define DBL 0200
16
17int pl = 11*144;
18int mpy = 1;
19int div = 1;
20char *ap;
21int ch;
22int nonumb;
23int psize = 10;
24int dfact = 1;
25int ibuf[259];
26char obuf[OBSZ];
27char *obufp = obuf;
28int esc;
29int escd;
30int verd;
31int esct;
32int osize = 02;
33int size = 02;
34int rx;
35int xx = 0;
36int yy = MAXY+62+48;
37int leadtot = -31;
38int ohy = -1;
39int ohx = -1;
40int oxb = -1;
41int oly = -1;
42int olx = -1;
43int tflag;
44int railmag;
45int lead;
46int skip;
47int pgskip;
48int ksize = ';';
49int mcase;
50int stab[] = {010,0,01,07,02,03,04,05,0211,06,0212,0213,0214,0215,0216,0217};
51int rtab[] = {6, 7, 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 28, 26, 18};
52int ktab[] = {';',';',';',';',';',';',':',':','9','9','9','9','8','8','8','9'};
53int od = 1;
54int first = 1;
55int alpha;
56int xxx;
57extern int *drawtab[], *moretab[];
58
59main(argc,argv)
60int argc;
61char **argv;
62{
63 register i, j;
64 extern ex();
65 extern char asctab[];
66 extern char spectab[];
67
68 openpl();
69 space(0,0,4095,3071);
70 while((--argc > 0) && ((++argv)[0][0]=='-')){
71 switch(argv[0][1]){
72 case 'p':
73 ap = &argv[0][2];
74 dfact = 72;
75 if(i = atoi())pl = i/3;
76 continue;
77 case 't':
78 tflag++;
79 continue;
80 case 's':
81 ap = &argv[0][2];
82 dfact = 1;
83 pgskip = atoi();
84 continue;
85 default:
86 dfact = 1;
87 ap = &argv[0][1];
88 if(i = atoi())mpy = i;
89 if(i = atoi())div = i;
90 continue;
91 }
92 }
93 if(argc){
94 if(fopen(argv[0], ibuf) < 0){
95 prstr("Cannot open: ");
96 prstr(argv[0]);
97 prstr("\n");
98 exit(1);
99 }
100 }
101 signal(SIGINT, ex);
102 while((i = getc(ibuf)) >= 0){
103 if(!i)continue;
104 if(i & 0200){
105 esc += (~i) & 0177;
106 continue;
107 }
108 if(esc){
109 if(escd)esc = -esc;
110 esct += esc;
111 xx += (esc*mpy + rx)/div;
112 rx = (esc*mpy + rx)%div;
113 sendpt();
114 esc = 0;
115 }
116 switch(i){
117 case 0100: /*init*/
118 escd = verd = mcase = railmag = xx = 0;
119 yy = MAXY + 48;
120 if(first){
121 first = 0;
122 yy += 62;
123 }
124 leadtot = -31;
125 ohy = oxb = oly = ohx = olx = -1;
126 init();
127 continue;
128 case 0101: /*lower rail*/
129 railmag &= ~01;
130 continue;
131 case 0102: /*upper rail*/
132 railmag |= 01;
133 continue;
134 case 0103: /*upper mag*/
135 railmag |= 02;
136 continue;
137 case 0104: /*lower mag*/
138 railmag &= ~02;
139 continue;
140 case 0105: /*lower case*/
141 mcase = 0;
142 continue;
143 case 0106: /*upper case*/
144 mcase = 0100;
145 continue;
146 case 0107: /*escape forward*/
147 escd = 0;
148 continue;
149 case 0110: /*escape backward*/
150 escd = 1;
151 continue;
152 case 0111: /*stop*/
153 continue;
154 case 0112: /*lead forward*/
155 verd = 0;
156 continue;
157 case 0113: /*undefined*/
158 continue;
159 case 0114: /*lead backward*/
160 verd = 1;
161 continue;
162 case 0115: /*undefined*/
163 case 0116:
164 case 0117:
165 continue;
166 }
167 if((i & 0340) == 0140){ /*leading*/
168 lead = (~i) & 037;
169 if(verd)lead = -lead;
170 if((leadtot += lead) > pl){
171 leadtot = lead;
172 flusho();
173 if(!tflag)kwait();
174 yy = MAXY;
175 if(pgskip)--pgskip;
176 init();
177 continue;
178 }
179 if(skip)continue;
180 if((yy -= (lead<<1)) < 0){
181 skip++;
182 yy = 0;
183 }else sendpt();
184 continue;
185 }
186 if((i & 0360) == 0120){ /*size change*/
187 i &= 017;
188 for(j = 0; i != (stab[j] & 017); j++);
189 osize = size;
190 size = stab[j];
191 psize = rtab[j];
192 ksize = ktab[j];
193 i = 0;
194 if(!(osize & DBL) && (size & DBL))i = -55;
195 else if((osize & DBL) && !(size & DBL))i = 55;
196 if(escd)i = -i;
197 esc += i;
198 continue;
199 }
200 if(i & 0300)continue;
201 i = (i & 077) | mcase;
202 if(railmag != 03)j = asctab[i];
203 else j = spectab[i];
204 if(alpha)sendpt();
205 if (j== 0) { /* see if we can draw this character */
206 trace( railmag == 03 ? drawtab[i] : moretab[i]);
207 continue;
208 }else if(j){
209 oput(j);
210 alpha++;
211 }
212 }
213 ex();
214}
215
216# define SCL(x) (psize*x/10)
217# define PT(x,y) xx-10+SCL(x), yy-20+SCL(y)
218trace (p)
219 int *p;
220{
221if (p==0) return;
222while (*p)
223 {
224 switch (*p)
225 {
226 case 'l':
227/*
228 line(xx-10+SCL(p[1]),yy-20+SCL(p[2]),xx-10+SCL(p[3]),yy-20+SCL(p[4]));
229 */ line(PT(p[1], p[2]), PT(p[3], p[4]));
230 p+=5;
231 break;
232 case 't':
233 move (xx+p[2], yy+p[3]);
234 label(p+1);
235 p+=4;
236 break;
237 case 'c':
238 circle(PT(p[1],p[2]), SCL(p[3]));
239 p+=4;
240 break;
241 case 'a':
242 arc (PT(p[1],p[2]), PT(p[3],p[4]), PT(p[5],p[6]));
243 p+=7;
244 break;
245 }
246 }
247}
248
249init(){
250 register i;
251
252 erase();
253 flusho();
254 skip = 0;
255 sendpt();
256}
257ex(){
258 yy = MAXY;
259 xx = 0;
260 sendpt();
261 closepl();
262 exit(0);
263}
264kwait(){
265 ;
266}
267oput(i)
268char i;
269{
270 if(pgskip)return;
271 label(&i);
272}
273flusho(){
274 ;
275}
276sendpt(){
277 move(xx,yy);
278 alpha = 0;
279 return;
280}
281prstr(s)
282char *s;
283{
284 register i;
285
286 for(i=0;*s;i++)s++;
287 write(2,s-i,i);
288}
289atoi()
290{
291 register i, j, acc;
292 int field, digits, *dd, *tscale();
293
294 field = digits = acc = 0;
295a1:
296 while(((j = (i = getch()) - '0') >= 0) && (j <= 9)){
297 field++;
298 digits++;
299 acc = 10*acc + j;
300 }
301 if(i == '.'){
302 field++;
303 digits = 0;
304 goto a1;
305 }
306 if(!(ch = i))ch = 'x';
307 dd = tscale(acc);
308 acc = dd[0];
309 if((field != digits) && (digits > 0)){
310 j = 1;
311 while(digits--)j *= 10;
312 acc = ldiv(dd[1],dd[0],j);
313 }
314 nonumb = !field;
315 ch = 0;
316 return(acc);
317}
318int *tscale(n)
319int n;
320{
321 register i, j;
322 static int aa[2];
323
324 switch(i = getch()){
325 case 'u':
326 j = 1;
327 break;
328 case 'p': /*Points*/
329 j = 6;
330 break;
331 case 'i': /*Inches*/
332 j = 432;
333 break;
334 case 'c': /*Centimeters; should be 170.0787*/
335 j = 170;
336 break;
337 case 'P': /*Picas*/
338 j = 72;
339 break;
340 default:
341 j = dfact;
342 ch = i;
343 }
344 aa[0] = n * j;
345 aa[1] = hmul(n,j);
346 return(aa);
347}
348getch(){
349 register i;
350
351 if(ch){
352 i = ch;
353 ch = 0;
354 return(i);
355 }
356 return(*ap++);
357}
358/* the way this program decides what to do is:
359 (1) If the character is on a standard font (0-2)
360
361 (a) look in "asctab"; if an entry, print that character.
362 else
363 (b) look in "moretab"; if an entry, it points to a vector
364 description, which draw.
365 (2) If the character is on the special font (railmag=3)
366 (a) look in "spectab"; if an entry >0,
367 print that character.
368 (b) if a -1, that requests the apl font; not used.
369 (c) if zero, look in "drawtab"; if an entry, it pooints
370 to a vector description, which draw.
371 (3) Vector descriptions are calls to the "plot" type routines.
372 the possible routines are 'c' (circle), 'l' (line), 't' (label,
373 only one character used), and 'a' (arc).
374 */
375char asctab[128] = {
376 0, /*blank*/
377'h', /*h*/
378't', /*t*/
379'n', /*n*/
380'm', /*m*/
381'l', /*l*/
382'i', /*i*/
383'z', /*z*/
384's', /*s*/
385'd', /*d*/
386'b', /*b*/
387'x', /*x*/
388'f', /*f*/
389'j', /*j*/
390'u', /*u*/
391'k', /*k*/
392 0, /*blank*/
393'p', /*p*/
394'-', /*_ 3/4 em dash*/
395';', /*;*/
396 0, /*blank*/
397'a', /*a*/
398'_', /*rule*/
399'c', /*c*/
400'`', /*` open*/
401'e', /*e*/
402'\'', /*' close*/
403'o', /*o*/
404 0, /*1/4*/
405'r', /*r*/
406 0, /*1/2*/
407'v', /*v*/
408'-', /*- hyphen*/
409'w', /*w*/
410'q', /*q*/
411'/', /*/*/
412'.', /*.*/
413'g', /*g*/
414 0, /*3/4*/
415',', /*,*/
416'&', /*&*/
417'y', /*y*/
418 0, /*blank*/
419'%', /*%*/
420 0, /*blank*/
421'Q', /*Q*/
422'T', /*T*/
423'O', /*O*/
424'H', /*H*/
425'N', /*N*/
426'M', /*M*/
427'L', /*L*/
428'R', /*R*/
429'G', /*G*/
430'I', /*I*/
431'P', /*P*/
432'C', /*C*/
433'V', /*V*/
434'E', /*E*/
435'Z', /*Z*/
436'D', /*D*/
437'B', /*B*/
438'S', /*S*/
439'Y', /*Y*/
440 0, /*blank*/
441'F', /*F*/
442'X', /*X*/
443'A', /*A*/
444'W', /*W*/
445'J', /*J*/
446'U', /*U*/
447'K', /*K*/
448'0', /*0*/
449'1', /*1*/
450'2', /*2*/
451'3', /*3*/
452'4', /*4*/
453'5', /*5*/
454'6', /*6*/
455'7', /*7*/
456'8', /*8*/
457'9', /*9*/
458'*', /***/
459'-', /*minus*/
460 0, /*fi*/
461 0, /*fl*/
462 0, /*ff*/
463 0, /*cent mark*/
464 0, /*ffl*/
465 0, /* ffi */
466'(', /*(*/
467')', /*)*/
468'[', /*[*/
469']', /*]*/
470 0, /*degree*/
471 0, /*dagger*/
472'=', /*=*/
473 0, /*registered*/
474':', /*:*/
475'+', /*+*/
476 0, /*blank*/
477'!', /*!*/
478 0, /*bullet*/
479'?', /*?*/
480'\'', /*foot mark*/
481'|', /*|*/
482 0, /*blank*/
483 0, /*copyright*/
484 0, /*square*/
485'$' }; /*$*/
486
487char spectab[128] = {
488 0, /*blank*/
489 0, /*psi*/
490 0, /*theta*/
491 0, /*nu*/
492 0, /*mu*/
493 0, /*lambda*/
494 0, /*iota*/
495 0, /*zeta*/
496 0, /*sigma*/
497 0, /*delta*/
498 0, /*beta*/
499 0, /*xi*/
500 0, /*eta*/
501 0, /*phi*/
502 'u', /*upsilon*/
503 0, /*kappa*/
504 0, /*blank*/
505 0, /*pi*/
506 '@', /*at sign @*/
507 0, /*down arrow*/
508 0, /*blank*/
509 0, /*alpha*/
510'|', /*or*/
511 0, /*chi*/
512'"', /*"*/
513 0, /*epsilon*/
514 '=', /*equals*/
515 'o', /*omicron*/
516 0, /*left arrow*/
517 0, /*rho*/
518 0, /*up arrow*/
519 0, /*tau*/
520'_', /*underrule*/
521'\\', /*\*/
522 0, /*Psi*/
523 0, /*bell system sign*/
524 0, /*infinity*/
525 0, /*gamma*/
526 0, /*improper superset*/
527 0, /*proportional to*/
528 0, /*right hand*/
529 0, /*omega*/
530 0, /*blank*/
531 0, /*gradient*/
532 0, /*blank*/
533 0, /*Phi*/
534 0, /*Theta*/
535 0, /*Omega*/
536 0, /*cup (union)*/
537 0, /*root en*/
538 0, /*terminal sigma*/
539 0, /*Lambda*/
540 '-', /*some horizontal line*/
541 0, /*Gamma*/
542 0, /*integral sign*/
543 0, /*Pi*/
544 0, /*subset of*/
545 0, /*superset of*/
546 0, /*approximates*/
547 0, /*partial derivative*/
548 0, /*Delta*/
549 0, /*square root*/
550 0, /*Sigma*/
551 0, /*approx =*/
552 0, /*blank*/
553'>', /*>*/
554 0, /*Xi*/
555'<', /*<*/
556'/', /*slash (longer)*/
557 0, /*cap (intersection)*/
558 'Y', /*Upsilon*/
559 0, /*not*/
560'|', /*right ceiling (rt of ")*/
561'|', /*left top (of big curly)*/
562'|', /*bold vertical*/
563'|', /*left center of big curly bracket*/
564'|', /*left bottom*/
565'|', /*right top*/
566'|', /*right center of big curly bracket*/
567'|', /*right bot*/
568'|', /*right floor (rb of ")*/
569'|', /*left floor (left bot of big sq bract)*/
570'|', /*left ceiling (lt of ")*/
571'x', /*multiply*/
572 0, /*divide*/
573 0, /*plus-minus*/
574 0, /*<=*/
575 0, /*>=*/
576 0, /*identically equal*/
577 0, /*not equal*/
578'{', /*{*/
579'}', /*}*/
580'\'', /*' acute accent*/
581'`', /*` grave accent*/
582'^', /*^*/
583 '#', /*sharp*/
584 0, /*left hand*/
585 0, /*member of*/
586'~', /*~*/
587 0, /*empty set*/
588 0, /*blank*/
589 0, /*dbl dagger*/
590'|', /*box rule*/
591 '*', /*telephone asterisk?*/
592 0, /*improper subset*/
593 0, /*circle*/
594 0, /*blank*/
595 '+', /*eqn plus sign*/
596 0, /*right arrow*/
597 0 }; /*section mark*/
598# define STOP 0
599int dnot[] = { 'l', 0, 15, 25, 15, 'l', 25, 15, 25, 5, STOP};
600int dlambda[] = {'l', 0, 40, 6, 40, 'l', 6, 40, 30, 0, 'l', 6, 0, 18, 20, STOP};
601int dSigma[] = {'l', 0, 0, 30, 0, 'l', 0, 40, 30, 40, 'l', 0, 0, 10, 20, 'l', 10, 20, 0, 40, STOP};
602int dsquare[] = {'l', 0, 0, 30, 0, 'l', 0, 0, 0, 30, 'l', 0, 30, 30, 30, 'l', 30, 0, 30, 30, STOP};
603int dDelta[] = {'l', 0,0, 30, 0, 'l', 0, 0, 15, 40, 'l', 15,40, 30, 0, STOP};
604int dintsign[] = { 'a', 25,30, 30,32, 20,32, 'l', 20, 32, 10, 8, 'a',5, 10, 0, 8, 10, 8, STOP};
605int dtheta[] = {'a', 25, 15, 10, 30, 10, 0, 'a', -5, 15, 10, 0, 10, 30, 'l', 5, 15, 12, 15, STOP};
606int dcopyr[] = {'c', 20, 20, 20, 't', 'c', 7,3, STOP};
607int dregist[] = {'c', 20, 20, 20, 't', 'R', 7,3, STOP};
608int dpi[] = { 'l', 0, 25, 30, 25, 'l', 5, 0, 8, 25, 'l', 17, 0, 20, 25, STOP};
609int dPi[] = { 'l', 0, 40, 30, 40, 'l', 5, 0, 5, 40, 'l', 25, 0, 25, 40, STOP};
610int dsqroot[] = { 'l', 0,10,5,10, 'l', 8, 10, 15, 0, 'l', 15, 0, 30, 40, STOP};
611int dgradient[] = { 'l', 0,40, 30, 40, 'l', 0, 40, 15, 0, 'l', 15, 0, 30, 40, STOP};
612int dbeta[] = {'t', 'B', 0, 5, 'l', 0, 20, 0, -10, STOP};
613int ddagger[] = {'l', 0, 30, 20, 30, 'l', 10, 0, 10, 40, STOP};
614int dpsi[] = { 'a', 15,25, 0, 27, 30, 23, 'l', 0, 0, 30, 40, STOP};
615int dmu[] = { 't', 'u', 0,5, 'l', 0,10, 0, -10, STOP};
616int dnu[] = { 'l',0,0,0,30, 'l', 0,0,20,30, STOP};
617int diota[] = { 'l', 0, 0, 4, 24, 'l', 6, 32, 6, 36, 'l', 0, 0, 5, 0, STOP};
618int dsigma[] = { 'c', 15,15,15, 'l', 15, 30, 35, 30, STOP};
619int ddelta[] = { 'c', 10, 10, 10, 'a', 16, 28, 18, 37, 14, 19, STOP};
620int depsilon[] = { 'a', 15, 15, 15, 30, 15, 0, 'l', 0, 15, 15, 15, STOP};
621int dchi[] = { 'l', 0, 30, 4, 30, 'l', 4, 30, 16, 0, 'l', 16, 0, 20, 0, 'l', 0, 0, 20, 30, STOP};
622int dtau[] = { 'l', 0, 30, 30, 30, 'l', 10, 0, 15, 30 , 'l', 10, 0, 15, 0, STOP};
623int dlesseq[] = { 'l', 0, 20, 30, 30, 'l', 0, 20, 30, 10, 'l', 0, 15, 30, 5, STOP};
624int dgreateq[] = { 'l', 0, 30, 30, 20, 'l', 0, 10, 30, 20, 'l', 0, 5, 30, 15, STOP};
625int dinfinity[] = { 'c', 10, 10, 10, 'c', 30 , 10, 10, STOP};
626int dalpha[] = { 'c', 15, 15, 15, 'a', 52, 15, 35, 30, 35, 0, STOP};
627int dphi[] = { 'c', 10, 15, 10, 'l', 5, 0, 15, 30, STOP};
628int dgamma[] = { 'l', 10, -10, 30, 30, 'a', 10, 15, 20, 10, 0, 20, STOP};
629int dkappa[] = { 'l', 0, 0, 6, 25, 'l', 3, 12, 20, 25, 'l', 6, 15, 20, 0, STOP};
630int drho[] = {'c', 15, 15, 10, 'l', 0, -5, 5, 20, STOP};
631int dGamma[] = {'l', 0, 0, 0, 35, 'l', 0, 35, 25, 35, 'l', 25, 35, 25, 25, STOP};
632int ddownar[]= {'l', 10, 0, 10, 30, 'l', 0, 10, 10, 0, 'l', 10, 0, 20, 10, STOP};
633int dupar[] = { 'l', 10, 0, 10, 30, 'l', 0, 20, 10, 30, 'l', 10, 30, 20, 20,STOP};
634int dleftar[] = { 'l', 0, 15, 25, 15, 'l', 10, 5, 0, 15, 'l', 10, 25, 0, 15, STOP};
635int drightar[] = { 'l', 0, 15, 25, 15, 'l', 15, 5, 25, 15, 'l', 15, 25, 25, 15, STOP};
636int ddivide[]= { 'l', 0, 15, 25, 15, 'l', 12, 20, 14, 20, 'l', 12, 10, 14, 10, STOP};
637int dcap[] = { 'a', 15, 10, 30, 10, 0, 10, 'l', 0, 0, 0, 10, 'l', 30, 0, 30, 10, STOP};
638int dcup[] = {'a', 15, 15, 0, 15, 30, 15, 'l', 0, 15, 0, 25, 'l', 30, 15, 30, 25, STOP};
639int dsubset[] = {'l', 0, 0, 10, 0, 'l', 0, 30, 10, 30, 'a', 10, 15, 10, 0, 10, 30,STOP};
640int dsupset[] = {'a', 15, 15, 15, 30, 15, 0, 'l', 15, 30, 25, 30, 'l', 15, 0, 25, 0, STOP};
641int dimpsubset[] = {'l', 0, 10, 10, 10, 'l', 0, 40, 10, 40, 'a', 10, 25, 10, 10, 10, 40, 'l', 0, 0, 30, 0, STOP};
642int dimpsupset[] = {'a', 15, 25, 15, 40, 15, 10, 'l', 15, 40, 25, 40, 'l', 15, 10, 25, 10, 'l', 0, 0, 30, 0, STOP};
643int dxi[] = {'l', 0, 30, 25, 30, 'a', 5, 25, 5, 30, 5, 20, 'l', 5, 20, 25, 20, 'a', 5, 15, 5, 20, 5, 10, 'l', 5, 10, 20, 10, 'a', 20, 5, 20, 0, 20, 10, STOP};
644int deta[] = {'a', 5,20,10,20,0,20, 'l', 10, 25, 10, 10, 'a', 15, 20, 20, 20, 10, 20, 'l', 20, 20, 20, 0, STOP};
645int dzeta[] = {'l', 0, 30, 25, 30, 'a', 20, 20, 20, 30, 20, 10, 'a', 20, 5, 20, 0, 20, 10, STOP};
646int dPsi[] = {'l', 0, 0, 30, 0, 'l', 0, 35, 30, 35, 'l', 15, 0, 15, 35, 'a', 15, 25, 0, 25, 30, 25, STOP};
647int dPhi[] = { 'l', 0, 0, 30, 0, 'l', 0, 40, 30, 40, 'l', 15, 0, 15, 40, 'c', 15, 20, 10, STOP};
648int domega[] = { 'a', 8, 18, 8, 26, 16, 18, 'a', 24, 18, 16, 18, 24, 26, STOP};
649int dtsigma[] = {'a', 10, 20, 17, 27, 10, 10, 'a', 10, 5, 10, 0, 10, 10, STOP};
650int dpartial[] = { 'c', 10, 10, 10, 'a', 0, 20, 10, 0, 0, 40, STOP};
651int dprop[] = {'c', 10,10,10, 'a', 30, 10, 30, 20, 30, 0, STOP};
652int dTheta[]= { 'c', 15, 15, 15, 'l', 5,15,25,15, 'l', 5, 13, 5, 17, 'l', 25, 13, 25, 17, STOP};
653int dXi[] = { 'l', 0, 40 , 30, 40, 'l' , 0, 0, 30, 0, 'l', 7, 20, 23, 20, STOP};
654int dLambda[] = { 'l', 0, 0, 15, 40, 'l', 15, 40, 30, 0, STOP};
655int drighth[]= { 'l', 0,0,20,0, 'l', 0, 10, 20, 10, 'l',0,20,20,20, 'l',0,30,35,30, 'l',0,40,35,40,
656 'a',20,5,20,0,20,10, 'a', 20,15,20,10,20,20, 'a',20,25,20,20,20,30, 'a',35,35,35,30,35,30,STOP};
657int dlefth[] = {'l', 20, 0, 40,0, 'l',20,10,40,10, 'l',20,20,40,20, 'l',5,30,40,30, 'l',5,40,40,40,
658 'a', 20, 5, 20,10,20,0, 'a', 20,15,20,20,20,10, 'a', 20, 25, 20,30,20,20, 'a', 5,35,5,40,5,30, STOP};
659int dcircle[] = {'c',15,15,15,STOP};
660int dapprox[] = {'a', 7, 0, 14, 15, 0, 15, 'a', 21, 30, 14,15,28,15, STOP};
661int dappreq[] = {'a', 7, 0, 14, 15, 0, 15, 'a', 21, 30, 14,15,28,15, 'l', 0, 0, 28, 0, STOP};
662int dOmega[] = {'a', 15,25,30,25,0,25, 'l',10,0,0,25, 'l',20,0,30,25, 'l',0,0,10,0, 'l',20,0,30,0, STOP};
663int dplmn[] = {'l', 0, 0, 30, 0, 'l', 0, 25, 30, 25, 'l', 15,10, 15, 40, STOP};
664int dmultiply[] = {'l',0,0,30,30, 'l', 0,30,30,0, STOP};
665int dident[]= {'l', 0,0,30,0, 'l',0,10,30,10, 'l',0,20,30,20, STOP};
666int dnoteq[] = {'l',0,10,30,10, 'l',0,25,30,25, 'l', 0,0,30,40, STOP};
667int ddbldag[] = {'l',10,0,10,30, 'l',0,5,20,5, 'l',0,25,20,25, STOP};
668int dbullet[] = { 'c',10,10,10, 'c',10,10,8, 'c', 10,10,6, 'c', 10, 10, 4, 'c', 10, 10, 2, STOP};
669int drooten[] = {'l', 0,30,25,30, STOP};
670int dempty[] = { 'c', 15, 15, 15, 'l', 0, 0, 30, 30, STOP};
671int dsection [] = {'a', 7,7, 7, 0, 7, 14, 'c', 7,21, 7, 'a', 7, 35, 7, 42, 7, 28, STOP};
672int dff[] = { 't', 'f', 0, 0, 't', 'f', 15, 0, STOP};
673int dfi[] = { 't', 'f', 0, 0, 't', 'i', 15, 0, STOP};
674int dfl[] = { 't', 'f', 0, 0, 't', 'l', 15, 0, STOP};
675int dffi[] = { 't', 'f', 0, 0, 't', 'f', 15, 0, 't', 'i', 30, 0, STOP};
676int dffl[] = { 't', 'f', 0, 0, 't', 'f', 15, 0, 't', 'l', 30, 0, STOP};
677int dcent[] = {'a', 15, 20, 25, 17, 25, 13, 'l', 15, 0, 15, 35, STOP};
678int ddegree[] = {'t', 'o', 0, 20, STOP};
679int dhalf[] = {'t', '1', 0, 20, 'l', 0, 0, 30, 40, 't', '2', 15, 0, STOP};
680int dquarter[] = {'t', '1', 0, 20, 'l', 0, 0, 30, 40, 't', '4', 15, 0, STOP};
681int dthreequarter[] = {'t', '3', 0, 20, 'l', 0, 0, 30, 40, 't', '4', 15, 0, STOP};
682int dbell[] = {'l', 0, 10, 40, 10, 'a', 0, 15, 0, 10, 5, 15, 'a', 40, 15, 35, 15, 40, 10,
683'a', 20, 15, 35, 15, 15, 15, 'l', 20, 35, 20, 40, 'l', 20, 0, 20, 10, 'c', 20, 20, 22, STOP};
684int *drawtab[128] = {
685 0, /*blank*/
686 dpsi, /*psi*/
687 dtheta, /*theta*/
688 dnu, /*nu*/
689 dmu, /*mu*/
690 dlambda, /*lambda*/
691 diota, /*iota*/
692 dzeta, /*zeta*/
693 dsigma, /*sigma*/
694 ddelta, /*delta*/
695 dbeta, /*beta*/
696 dxi, /*xi*/
697 deta, /*eta*/
698 dphi, /*phi*/
699 0, /*upsilon ASCII*/
700 dkappa, /*kappa*/
701 0, /*blank*/
702 dpi, /*pi*/
703 0, /* at sign (ASCII) */
704 ddownar, /*down arrow*/
705 0, /*blank*/
706 dalpha, /*alpha*/
707 0, /*or (ASCII)*/
708 dchi, /*chi*/
709 0, /*" (ASCII)*/
710 depsilon, /*epsilon*/
711 0, /*= (ASCII)*/
712 0, /*omicron (ASCII)*/
713 dleftar, /*left arrow*/
714 drho, /*rho*/
715 dupar, /*up arrow*/
716 dtau, /*tau*/
717 0, /*underrule (ASCII)*/
718 0, /*\ (ASCII)*/
719 dPsi, /*Psi*/
720 dbell, /*bell system sign*/
721 dinfinity, /*infinity*/
722 dgamma, /*gamma*/
723 dimpsupset, /*improper superset*/
724 dprop, /*proportional to*/
725 drighth, /*right hand*/
726 domega, /*omega*/
727 0, /*blank*/
728 dgradient, /*gradient*/
729 0, /*blank*/
730 dPhi, /*Phi*/
731 dTheta, /*Theta*/
732 dOmega, /*Omega */
733 dcup, /*cup (union)*/
734 drooten, /*root en*/
735 dtsigma, /*terminal sigma*/
736 dLambda, /*Lambda*/
737 0, /* some kind of horizontal line (ASCII) */
738 dGamma, /*Gamma*/
739 dintsign, /*integral sign*/
740 dPi, /*Pi*/
741 dsubset, /*subset of*/
742 dsupset, /*superset of*/
743 dapprox, /*approximates*/
744 dpartial, /*partial derivative*/
745 dDelta, /*Delta*/
746 dsqroot, /*square root*/
747 dSigma, /*Sigma*/
748 dappreq, /* approx equal */
749 0, /*blank*/
750 0, /*> (ASCII)*/
751 dXi, /*Xi*/
752 0, /*< (ASCII)*/
753 0, /*slash (longer)*/
754 dcap, /*cap (intersection)*/
755 0, /*Upsilon (ASCII Y)*/
756 dnot, /*not*/
757 0, /*right ceiling (rt of ")*/
758 0, /*left top (of big curly)*/
759 0, /*bold vertical*/
760 0, /*left center of big curly bracket*/
761 0, /*left bottom*/
762 0, /*right top*/
763 0, /*right center of big curly bracket*/
764 0, /*right bot*/
765 0, /*right floor (rb of ")*/
766 0, /*left floor (left bot of big sq bract)*/
767 0, /*left ceiling (lt of ")*/
768 dmultiply, /*multiply*/
769 ddivide, /*divide*/
770 dplmn, /*plus-minus*/
771 dlesseq, /*<=*/
772 dgreateq, /*>=*/
773 dident, /*identically equal*/
774 dnoteq, /*not equal*/
775 0, /*{ (ASCII)*/
776 0, /*} (ASCII)*/
777 0, /*' acute accent (ASCII)*/
778 0, /*` grave accent (ASCII)*/
779 0, /*^ (ASCII)*/
780 0, /* sharp (ASCII)*/
781 dlefth, /*left hand*/
782 depsilon, /*member of*/
783 0, /* ~ ASCII*/
784 dempty, /*empty set*/
785 0, /*blank*/
786 ddbldag, /*dbl dagger*/
787 0, /*box rule ASCII*/
788 0, /*asterisk (ASCII)*/
789 dimpsubset, /*improper subset*/
790 dcircle, /*circle*/
791 0, /*blank*/
792 0, /*plus (ASCII)*/
793 drightar, /*right arrow*/
794 dsection }; /*section mark*/
795int *moretab[128] = {
796 0,
797 0,
798 0,
799 0,
800 0,
801 0,
802 0,
803 0,
804 0,
805 0,
806 0,
807 0,
808 0,
809 0,
810 0,
811 0,
812 0,
813 0,
814 0,
815 0,
816 0,
817 0,
818 0,
819 0,
820 0,
821 0,
822 0,
823 0,
824 dquarter, /* one quarter 1/4 */
825 0,
826 dhalf, /* one half 1/2 */
827 0,
828 0,
829 0,
830 0,
831 0,
832 0,
833 0,
834 dthreequarter, /* 3 /4 */
835 0,
836 0,
837 0,
838 0,
839 0,
840 0,
841 0,
842 0,
843 0,
844 0,
845 0,
846 0,
847 0,
848 0,
849 0,
850 0,
851 0,
852 0,
853 0,
854 0,
855 0,
856 0,
857 0,
858 0,
859 0,
860 0,
861 0,
862 0,
863 0,
864 0,
865 0,
866 0,
867 0,
868 0,
869 0,
870 0,
871 0,
872 0,
873 0,
874 0,
875 0,
876 0,
877 0,
878 0,
879 0,
880 dfi, /* fi */
881 dfl, /* fl */
882 dff, /* ff */
883 dcent, /* cent mark */
884 dffl, /* ffl */
885 dffi, /* ffi */
886 0,
887 0,
888 0,
889 0,
890 0,
891 ddagger, /* dagger */
892 0,
893 dregist, /* registered */
894 0,
895 0,
896 0,
897 0,
898 dbullet, /* bullet */
899 0,
900 0,
901 0,
902 0,
903 dcopyr, /* copyright */
904 dsquare, /* square */
905 0,
906 0,
907 0,
908 0,
909 0,
910 0,
911 0,
912 0,
913 0,
914 0,
915 0,
916 0,
917 0,
918 0,
919 0,
920 0,
921 0,
922 0,
923 0
924 };