Commit | Line | Data |
---|---|---|
3fcad733 TL |
1 | #include <signal.h> |
2 | #define X 0 | |
3 | /* | |
4 | C 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 | ||
17 | int pl = 11*144; | |
18 | int mpy = 1; | |
19 | int div = 1; | |
20 | char *ap; | |
21 | int ch; | |
22 | int nonumb; | |
23 | int psize = 10; | |
24 | int dfact = 1; | |
25 | int ibuf[259]; | |
26 | char obuf[OBSZ]; | |
27 | char *obufp = obuf; | |
28 | int esc; | |
29 | int escd; | |
30 | int verd; | |
31 | int esct; | |
32 | int osize = 02; | |
33 | int size = 02; | |
34 | int rx; | |
35 | int xx = 0; | |
36 | int yy = MAXY+62+48; | |
37 | int leadtot = -31; | |
38 | int ohy = -1; | |
39 | int ohx = -1; | |
40 | int oxb = -1; | |
41 | int oly = -1; | |
42 | int olx = -1; | |
43 | int tflag; | |
44 | int railmag; | |
45 | int lead; | |
46 | int skip; | |
47 | int pgskip; | |
48 | int ksize = ';'; | |
49 | int mcase; | |
50 | int stab[] = {010,0,01,07,02,03,04,05,0211,06,0212,0213,0214,0215,0216,0217}; | |
51 | int rtab[] = {6, 7, 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 28, 26, 18}; | |
52 | int ktab[] = {';',';',';',';',';',';',':',':','9','9','9','9','8','8','8','9'}; | |
53 | int od = 1; | |
54 | int first = 1; | |
55 | int alpha; | |
56 | int xxx; | |
57 | extern int *drawtab[], *moretab[]; | |
58 | ||
59 | main(argc,argv) | |
60 | int argc; | |
61 | char **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) | |
218 | trace (p) | |
219 | int *p; | |
220 | { | |
221 | if (p==0) return; | |
222 | while (*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 | ||
249 | init(){ | |
250 | register i; | |
251 | ||
252 | erase(); | |
253 | flusho(); | |
254 | skip = 0; | |
255 | sendpt(); | |
256 | } | |
257 | ex(){ | |
258 | yy = MAXY; | |
259 | xx = 0; | |
260 | sendpt(); | |
261 | closepl(); | |
262 | exit(0); | |
263 | } | |
264 | kwait(){ | |
265 | ; | |
266 | } | |
267 | oput(i) | |
268 | char i; | |
269 | { | |
270 | if(pgskip)return; | |
271 | label(&i); | |
272 | } | |
273 | flusho(){ | |
274 | ; | |
275 | } | |
276 | sendpt(){ | |
277 | move(xx,yy); | |
278 | alpha = 0; | |
279 | return; | |
280 | } | |
281 | prstr(s) | |
282 | char *s; | |
283 | { | |
284 | register i; | |
285 | ||
286 | for(i=0;*s;i++)s++; | |
287 | write(2,s-i,i); | |
288 | } | |
289 | atoi() | |
290 | { | |
291 | register i, j, acc; | |
292 | int field, digits, *dd, *tscale(); | |
293 | ||
294 | field = digits = acc = 0; | |
295 | a1: | |
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 | } | |
318 | int *tscale(n) | |
319 | int 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 | } | |
348 | getch(){ | |
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 | */ | |
375 | char 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 | ||
487 | char 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 | |
599 | int dnot[] = { 'l', 0, 15, 25, 15, 'l', 25, 15, 25, 5, STOP}; | |
600 | int dlambda[] = {'l', 0, 40, 6, 40, 'l', 6, 40, 30, 0, 'l', 6, 0, 18, 20, STOP}; | |
601 | int dSigma[] = {'l', 0, 0, 30, 0, 'l', 0, 40, 30, 40, 'l', 0, 0, 10, 20, 'l', 10, 20, 0, 40, STOP}; | |
602 | int dsquare[] = {'l', 0, 0, 30, 0, 'l', 0, 0, 0, 30, 'l', 0, 30, 30, 30, 'l', 30, 0, 30, 30, STOP}; | |
603 | int dDelta[] = {'l', 0,0, 30, 0, 'l', 0, 0, 15, 40, 'l', 15,40, 30, 0, STOP}; | |
604 | int dintsign[] = { 'a', 25,30, 30,32, 20,32, 'l', 20, 32, 10, 8, 'a',5, 10, 0, 8, 10, 8, STOP}; | |
605 | int dtheta[] = {'a', 25, 15, 10, 30, 10, 0, 'a', -5, 15, 10, 0, 10, 30, 'l', 5, 15, 12, 15, STOP}; | |
606 | int dcopyr[] = {'c', 20, 20, 20, 't', 'c', 7,3, STOP}; | |
607 | int dregist[] = {'c', 20, 20, 20, 't', 'R', 7,3, STOP}; | |
608 | int dpi[] = { 'l', 0, 25, 30, 25, 'l', 5, 0, 8, 25, 'l', 17, 0, 20, 25, STOP}; | |
609 | int dPi[] = { 'l', 0, 40, 30, 40, 'l', 5, 0, 5, 40, 'l', 25, 0, 25, 40, STOP}; | |
610 | int dsqroot[] = { 'l', 0,10,5,10, 'l', 8, 10, 15, 0, 'l', 15, 0, 30, 40, STOP}; | |
611 | int dgradient[] = { 'l', 0,40, 30, 40, 'l', 0, 40, 15, 0, 'l', 15, 0, 30, 40, STOP}; | |
612 | int dbeta[] = {'t', 'B', 0, 5, 'l', 0, 20, 0, -10, STOP}; | |
613 | int ddagger[] = {'l', 0, 30, 20, 30, 'l', 10, 0, 10, 40, STOP}; | |
614 | int dpsi[] = { 'a', 15,25, 0, 27, 30, 23, 'l', 0, 0, 30, 40, STOP}; | |
615 | int dmu[] = { 't', 'u', 0,5, 'l', 0,10, 0, -10, STOP}; | |
616 | int dnu[] = { 'l',0,0,0,30, 'l', 0,0,20,30, STOP}; | |
617 | int diota[] = { 'l', 0, 0, 4, 24, 'l', 6, 32, 6, 36, 'l', 0, 0, 5, 0, STOP}; | |
618 | int dsigma[] = { 'c', 15,15,15, 'l', 15, 30, 35, 30, STOP}; | |
619 | int ddelta[] = { 'c', 10, 10, 10, 'a', 16, 28, 18, 37, 14, 19, STOP}; | |
620 | int depsilon[] = { 'a', 15, 15, 15, 30, 15, 0, 'l', 0, 15, 15, 15, STOP}; | |
621 | int dchi[] = { 'l', 0, 30, 4, 30, 'l', 4, 30, 16, 0, 'l', 16, 0, 20, 0, 'l', 0, 0, 20, 30, STOP}; | |
622 | int dtau[] = { 'l', 0, 30, 30, 30, 'l', 10, 0, 15, 30 , 'l', 10, 0, 15, 0, STOP}; | |
623 | int dlesseq[] = { 'l', 0, 20, 30, 30, 'l', 0, 20, 30, 10, 'l', 0, 15, 30, 5, STOP}; | |
624 | int dgreateq[] = { 'l', 0, 30, 30, 20, 'l', 0, 10, 30, 20, 'l', 0, 5, 30, 15, STOP}; | |
625 | int dinfinity[] = { 'c', 10, 10, 10, 'c', 30 , 10, 10, STOP}; | |
626 | int dalpha[] = { 'c', 15, 15, 15, 'a', 52, 15, 35, 30, 35, 0, STOP}; | |
627 | int dphi[] = { 'c', 10, 15, 10, 'l', 5, 0, 15, 30, STOP}; | |
628 | int dgamma[] = { 'l', 10, -10, 30, 30, 'a', 10, 15, 20, 10, 0, 20, STOP}; | |
629 | int dkappa[] = { 'l', 0, 0, 6, 25, 'l', 3, 12, 20, 25, 'l', 6, 15, 20, 0, STOP}; | |
630 | int drho[] = {'c', 15, 15, 10, 'l', 0, -5, 5, 20, STOP}; | |
631 | int dGamma[] = {'l', 0, 0, 0, 35, 'l', 0, 35, 25, 35, 'l', 25, 35, 25, 25, STOP}; | |
632 | int ddownar[]= {'l', 10, 0, 10, 30, 'l', 0, 10, 10, 0, 'l', 10, 0, 20, 10, STOP}; | |
633 | int dupar[] = { 'l', 10, 0, 10, 30, 'l', 0, 20, 10, 30, 'l', 10, 30, 20, 20,STOP}; | |
634 | int dleftar[] = { 'l', 0, 15, 25, 15, 'l', 10, 5, 0, 15, 'l', 10, 25, 0, 15, STOP}; | |
635 | int drightar[] = { 'l', 0, 15, 25, 15, 'l', 15, 5, 25, 15, 'l', 15, 25, 25, 15, STOP}; | |
636 | int ddivide[]= { 'l', 0, 15, 25, 15, 'l', 12, 20, 14, 20, 'l', 12, 10, 14, 10, STOP}; | |
637 | int dcap[] = { 'a', 15, 10, 30, 10, 0, 10, 'l', 0, 0, 0, 10, 'l', 30, 0, 30, 10, STOP}; | |
638 | int dcup[] = {'a', 15, 15, 0, 15, 30, 15, 'l', 0, 15, 0, 25, 'l', 30, 15, 30, 25, STOP}; | |
639 | int dsubset[] = {'l', 0, 0, 10, 0, 'l', 0, 30, 10, 30, 'a', 10, 15, 10, 0, 10, 30,STOP}; | |
640 | int dsupset[] = {'a', 15, 15, 15, 30, 15, 0, 'l', 15, 30, 25, 30, 'l', 15, 0, 25, 0, STOP}; | |
641 | int dimpsubset[] = {'l', 0, 10, 10, 10, 'l', 0, 40, 10, 40, 'a', 10, 25, 10, 10, 10, 40, 'l', 0, 0, 30, 0, STOP}; | |
642 | int dimpsupset[] = {'a', 15, 25, 15, 40, 15, 10, 'l', 15, 40, 25, 40, 'l', 15, 10, 25, 10, 'l', 0, 0, 30, 0, STOP}; | |
643 | int 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}; | |
644 | int 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}; | |
645 | int dzeta[] = {'l', 0, 30, 25, 30, 'a', 20, 20, 20, 30, 20, 10, 'a', 20, 5, 20, 0, 20, 10, STOP}; | |
646 | int dPsi[] = {'l', 0, 0, 30, 0, 'l', 0, 35, 30, 35, 'l', 15, 0, 15, 35, 'a', 15, 25, 0, 25, 30, 25, STOP}; | |
647 | int dPhi[] = { 'l', 0, 0, 30, 0, 'l', 0, 40, 30, 40, 'l', 15, 0, 15, 40, 'c', 15, 20, 10, STOP}; | |
648 | int domega[] = { 'a', 8, 18, 8, 26, 16, 18, 'a', 24, 18, 16, 18, 24, 26, STOP}; | |
649 | int dtsigma[] = {'a', 10, 20, 17, 27, 10, 10, 'a', 10, 5, 10, 0, 10, 10, STOP}; | |
650 | int dpartial[] = { 'c', 10, 10, 10, 'a', 0, 20, 10, 0, 0, 40, STOP}; | |
651 | int dprop[] = {'c', 10,10,10, 'a', 30, 10, 30, 20, 30, 0, STOP}; | |
652 | int dTheta[]= { 'c', 15, 15, 15, 'l', 5,15,25,15, 'l', 5, 13, 5, 17, 'l', 25, 13, 25, 17, STOP}; | |
653 | int dXi[] = { 'l', 0, 40 , 30, 40, 'l' , 0, 0, 30, 0, 'l', 7, 20, 23, 20, STOP}; | |
654 | int dLambda[] = { 'l', 0, 0, 15, 40, 'l', 15, 40, 30, 0, STOP}; | |
655 | int 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}; | |
657 | int 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}; | |
659 | int dcircle[] = {'c',15,15,15,STOP}; | |
660 | int dapprox[] = {'a', 7, 0, 14, 15, 0, 15, 'a', 21, 30, 14,15,28,15, STOP}; | |
661 | int dappreq[] = {'a', 7, 0, 14, 15, 0, 15, 'a', 21, 30, 14,15,28,15, 'l', 0, 0, 28, 0, STOP}; | |
662 | int 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}; | |
663 | int dplmn[] = {'l', 0, 0, 30, 0, 'l', 0, 25, 30, 25, 'l', 15,10, 15, 40, STOP}; | |
664 | int dmultiply[] = {'l',0,0,30,30, 'l', 0,30,30,0, STOP}; | |
665 | int dident[]= {'l', 0,0,30,0, 'l',0,10,30,10, 'l',0,20,30,20, STOP}; | |
666 | int dnoteq[] = {'l',0,10,30,10, 'l',0,25,30,25, 'l', 0,0,30,40, STOP}; | |
667 | int ddbldag[] = {'l',10,0,10,30, 'l',0,5,20,5, 'l',0,25,20,25, STOP}; | |
668 | int dbullet[] = { 'c',10,10,10, 'c',10,10,8, 'c', 10,10,6, 'c', 10, 10, 4, 'c', 10, 10, 2, STOP}; | |
669 | int drooten[] = {'l', 0,30,25,30, STOP}; | |
670 | int dempty[] = { 'c', 15, 15, 15, 'l', 0, 0, 30, 30, STOP}; | |
671 | int dsection [] = {'a', 7,7, 7, 0, 7, 14, 'c', 7,21, 7, 'a', 7, 35, 7, 42, 7, 28, STOP}; | |
672 | int dff[] = { 't', 'f', 0, 0, 't', 'f', 15, 0, STOP}; | |
673 | int dfi[] = { 't', 'f', 0, 0, 't', 'i', 15, 0, STOP}; | |
674 | int dfl[] = { 't', 'f', 0, 0, 't', 'l', 15, 0, STOP}; | |
675 | int dffi[] = { 't', 'f', 0, 0, 't', 'f', 15, 0, 't', 'i', 30, 0, STOP}; | |
676 | int dffl[] = { 't', 'f', 0, 0, 't', 'f', 15, 0, 't', 'l', 30, 0, STOP}; | |
677 | int dcent[] = {'a', 15, 20, 25, 17, 25, 13, 'l', 15, 0, 15, 35, STOP}; | |
678 | int ddegree[] = {'t', 'o', 0, 20, STOP}; | |
679 | int dhalf[] = {'t', '1', 0, 20, 'l', 0, 0, 30, 40, 't', '2', 15, 0, STOP}; | |
680 | int dquarter[] = {'t', '1', 0, 20, 'l', 0, 0, 30, 40, 't', '4', 15, 0, STOP}; | |
681 | int dthreequarter[] = {'t', '3', 0, 20, 'l', 0, 0, 30, 40, 't', '4', 15, 0, STOP}; | |
682 | int 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}; | |
684 | int *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*/ | |
795 | int *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 | }; |