| 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 | }; |