|
|
1.1 ! root 1: /* ! 2: * troff5.c ! 3: * ! 4: * misc processing requests ! 5: */ ! 6: ! 7: #include "tdef.h" ! 8: #include "fns.h" ! 9: #include "ext.h" ! 10: ! 11: int iflist[NIF]; ! 12: int ifx; ! 13: ! 14: void casead(void) ! 15: { ! 16: int i; ! 17: ! 18: ad = 1; ! 19: /* leave admod alone */ ! 20: if (skip()) ! 21: return; ! 22: switch (i = cbits(getch())) { ! 23: case 'r': /* right adj, left ragged */ ! 24: admod = 2; ! 25: break; ! 26: case 'l': /* left adj, right ragged */ ! 27: admod = ad = 0; /* same as casena */ ! 28: break; ! 29: case 'c': /*centered adj*/ ! 30: admod = 1; ! 31: break; ! 32: case 'b': ! 33: case 'n': ! 34: admod = 0; ! 35: break; ! 36: case '0': ! 37: case '2': ! 38: case '4': ! 39: ad = 0; ! 40: case '1': ! 41: case '3': ! 42: case '5': ! 43: admod = (i - '0') / 2; ! 44: } ! 45: } ! 46: ! 47: ! 48: void casena(void) ! 49: { ! 50: ad = 0; ! 51: } ! 52: ! 53: ! 54: void casefi(void) ! 55: { ! 56: tbreak(); ! 57: fi = 1; ! 58: pendnf = 0; ! 59: lnsize = LNSIZE; ! 60: } ! 61: ! 62: ! 63: void casenf(void) ! 64: { ! 65: tbreak(); ! 66: fi = 0; ! 67: } ! 68: ! 69: ! 70: void casers(void) ! 71: { ! 72: dip->nls = 0; ! 73: } ! 74: ! 75: ! 76: void casens(void) ! 77: { ! 78: dip->nls++; ! 79: } ! 80: ! 81: ! 82: chget(int c) ! 83: { ! 84: Tchar i; ! 85: ! 86: if (skip() || ismot(i = getch()) || cbits(i) == ' ' || cbits(i) == '\n') { ! 87: ch = i; ! 88: return(c); ! 89: } else ! 90: return cbits(i); /* was (i & BYTEMASK) */ ! 91: } ! 92: ! 93: ! 94: void casecc(void) ! 95: { ! 96: cc = chget('.'); ! 97: } ! 98: ! 99: ! 100: void casec2(void) ! 101: { ! 102: c2 = chget('\''); ! 103: } ! 104: ! 105: ! 106: void casehc(void) ! 107: { ! 108: ohc = chget(OHC); ! 109: } ! 110: ! 111: ! 112: void casetc(void) ! 113: { ! 114: tabc = chget(0); ! 115: } ! 116: ! 117: ! 118: void caselc(void) ! 119: { ! 120: dotc = chget(0); ! 121: } ! 122: ! 123: ! 124: void casehy(void) ! 125: { ! 126: int i; ! 127: ! 128: hyf = 1; ! 129: if (skip()) ! 130: return; ! 131: noscale++; ! 132: i = atoi0(); ! 133: noscale = 0; ! 134: if (nonumb) ! 135: return; ! 136: hyf = max(i, 0); ! 137: } ! 138: ! 139: ! 140: void casenh(void) ! 141: { ! 142: hyf = 0; ! 143: } ! 144: ! 145: ! 146: max(int aa, int bb) ! 147: { ! 148: if (aa > bb) ! 149: return(aa); ! 150: else ! 151: return(bb); ! 152: } ! 153: ! 154: ! 155: void casece(void) ! 156: { ! 157: int i; ! 158: ! 159: noscale++; ! 160: skip(); ! 161: i = max(atoi0(), 0); ! 162: if (nonumb) ! 163: i = 1; ! 164: tbreak(); ! 165: ce = i; ! 166: noscale = 0; ! 167: } ! 168: ! 169: ! 170: void casein(void) ! 171: { ! 172: int i; ! 173: ! 174: if (skip()) ! 175: i = in1; ! 176: else ! 177: i = max(hnumb(&in), 0); ! 178: tbreak(); ! 179: in1 = in; ! 180: in = i; ! 181: if (!nc) { ! 182: un = in; ! 183: setnel(); ! 184: } ! 185: } ! 186: ! 187: ! 188: void casell(void) ! 189: { ! 190: int i; ! 191: ! 192: if (skip()) ! 193: i = ll1; ! 194: else ! 195: i = max(hnumb(&ll), INCH / 10); ! 196: ll1 = ll; ! 197: ll = i; ! 198: setnel(); ! 199: } ! 200: ! 201: ! 202: void caselt(void) ! 203: { ! 204: int i; ! 205: ! 206: if (skip()) ! 207: i = lt1; ! 208: else ! 209: i = max(hnumb(<), 0); ! 210: lt1 = lt; ! 211: lt = i; ! 212: } ! 213: ! 214: ! 215: void caseti(void) ! 216: { ! 217: int i; ! 218: ! 219: if (skip()) ! 220: return; ! 221: i = max(hnumb(&in), 0); ! 222: tbreak(); ! 223: un1 = i; ! 224: setnel(); ! 225: } ! 226: ! 227: ! 228: void casels(void) ! 229: { ! 230: int i; ! 231: ! 232: noscale++; ! 233: if (skip()) ! 234: i = ls1; ! 235: else ! 236: i = max(inumb(&ls), 1); ! 237: ls1 = ls; ! 238: ls = i; ! 239: noscale = 0; ! 240: } ! 241: ! 242: ! 243: void casepo(void) ! 244: { ! 245: int i; ! 246: ! 247: if (skip()) ! 248: i = po1; ! 249: else { ! 250: i = max(hnumb(&po), 0); ! 251: if (nonumb) ! 252: i = po1; ! 253: } ! 254: po1 = po; ! 255: po = i; ! 256: if (TROFF & !ascii) ! 257: esc += po - po1; ! 258: } ! 259: ! 260: ! 261: void casepl(void) ! 262: { ! 263: int i; ! 264: ! 265: skip(); ! 266: if ((i = vnumb(&pl)) == 0) ! 267: pl = 11 * INCH; /*11in*/ ! 268: else ! 269: pl = i; ! 270: if (numtab[NL].val > pl) ! 271: numtab[NL].val = pl; ! 272: } ! 273: ! 274: ! 275: void casewh(void) ! 276: { ! 277: int i, j, k; ! 278: ! 279: lgf++; ! 280: skip(); ! 281: i = vnumb((int *)0); ! 282: if (nonumb) ! 283: return; ! 284: skip(); ! 285: j = getrq(); ! 286: if ((k = findn(i)) != NTRAP) { ! 287: mlist[k] = j; ! 288: return; ! 289: } ! 290: for (k = 0; k < NTRAP; k++) ! 291: if (mlist[k] == 0) ! 292: break; ! 293: if (k == NTRAP) { ! 294: flusho(); ! 295: ERROR "cannot plant trap." WARN; ! 296: return; ! 297: } ! 298: mlist[k] = j; ! 299: nlist[k] = i; ! 300: } ! 301: ! 302: ! 303: void casech(void) ! 304: { ! 305: int i, j, k; ! 306: ! 307: lgf++; ! 308: skip(); ! 309: if (!(j = getrq())) ! 310: return; ! 311: else ! 312: for (k = 0; k < NTRAP; k++) ! 313: if (mlist[k] == j) ! 314: break; ! 315: if (k == NTRAP) ! 316: return; ! 317: skip(); ! 318: i = vnumb((int *)0); ! 319: if (nonumb) ! 320: mlist[k] = 0; ! 321: nlist[k] = i; ! 322: } ! 323: ! 324: ! 325: findn(int i) ! 326: { ! 327: int k; ! 328: ! 329: for (k = 0; k < NTRAP; k++) ! 330: if ((nlist[k] == i) && (mlist[k] != 0)) ! 331: break; ! 332: return(k); ! 333: } ! 334: ! 335: ! 336: void casepn(void) ! 337: { ! 338: int i; ! 339: ! 340: skip(); ! 341: noscale++; ! 342: i = max(inumb(&numtab[PN].val), 0); ! 343: noscale = 0; ! 344: if (!nonumb) { ! 345: npn = i; ! 346: npnflg++; ! 347: } ! 348: } ! 349: ! 350: ! 351: void casebp(void) ! 352: { ! 353: int i; ! 354: Stack *savframe; ! 355: ! 356: if (dip != d) ! 357: return; ! 358: savframe = frame; ! 359: skip(); ! 360: if ((i = inumb(&numtab[PN].val)) < 0) ! 361: i = 0; ! 362: tbreak(); ! 363: if (!nonumb) { ! 364: npn = i; ! 365: npnflg++; ! 366: } else if (dip->nls) ! 367: return; ! 368: eject(savframe); ! 369: } ! 370: ! 371: void casetm(void) ! 372: { ! 373: casetm1(0); ! 374: } ! 375: ! 376: void casetm1(int ab) ! 377: { ! 378: int i, j, c; ! 379: char *p; ! 380: char tmbuf[NTM]; ! 381: ! 382: lgf++; ! 383: copyf++; ! 384: if (skip() && ab) ! 385: ERROR "User Abort" WARN; ! 386: for (i = 0; i < NTM - 2; ) { ! 387: if ((c = cbits(getch())) == '\n' || c == RIGHT) ! 388: break; ! 389: else if (c == MINUS) { /* special pleading for strange encodings */ ! 390: tmbuf[i++] = '\\'; ! 391: tmbuf[i++] = '-'; ! 392: } else if (c == PRESC) { ! 393: tmbuf[i++] = '\\'; ! 394: tmbuf[i++] = 'e'; ! 395: } else if (c == FILLER) { ! 396: tmbuf[i++] = '\\'; ! 397: tmbuf[i++] = '&'; ! 398: } else if (c == UNPAD) { ! 399: tmbuf[i++] = '\\'; ! 400: tmbuf[i++] = ' '; ! 401: } else if (c == OHC) { ! 402: tmbuf[i++] = '\\'; ! 403: tmbuf[i++] = '%'; ! 404: } else if (c >= ALPHABET && c < nchnames + ALPHABET) { /* \N DOESN'T WORK YET */ ! 405: p = chname(c); ! 406: if ((j = strlen(p)) == 2) ! 407: sprintf(&tmbuf[i], "\\(%s", p); ! 408: else { ! 409: sprintf(&tmbuf[i], "\\C'%s'", p); ! 410: j += 2; ! 411: } ! 412: i += j + 2; ! 413: } else ! 414: tmbuf[i++] = c; ! 415: } ! 416: tmbuf[i] = 0; ! 417: if (ab) /* truncate output */ ! 418: obufp = obuf; /* should be a function in n2.c */ ! 419: flusho(); ! 420: fprintf(stderr, "%s\n", tmbuf); ! 421: copyf--; ! 422: lgf--; ! 423: } ! 424: ! 425: ! 426: void casesp(void) ! 427: { ! 428: casesp1(0); ! 429: } ! 430: ! 431: void casesp1(int a) ! 432: { ! 433: int i, j, savlss; ! 434: ! 435: tbreak(); ! 436: if (dip->nls || trap) ! 437: return; ! 438: i = findt1(); ! 439: if (!a) { ! 440: skip(); ! 441: j = vnumb((int *)0); ! 442: if (nonumb) ! 443: j = lss; ! 444: } else ! 445: j = a; ! 446: if (j == 0) ! 447: return; ! 448: if (i < j) ! 449: j = i; ! 450: savlss = lss; ! 451: if (dip != d) ! 452: i = dip->dnl; ! 453: else ! 454: i = numtab[NL].val; ! 455: if ((i + j) < 0) ! 456: j = -i; ! 457: lss = j; ! 458: newline(0); ! 459: lss = savlss; ! 460: } ! 461: ! 462: ! 463: void casert(void) ! 464: { ! 465: int a, *p; ! 466: ! 467: skip(); ! 468: if (dip != d) ! 469: p = &dip->dnl; ! 470: else ! 471: p = &numtab[NL].val; ! 472: a = vnumb(p); ! 473: if (nonumb) ! 474: a = dip->mkline; ! 475: if ((a < 0) || (a >= *p)) ! 476: return; ! 477: nb++; ! 478: casesp1(a - *p); ! 479: } ! 480: ! 481: ! 482: void caseem(void) ! 483: { ! 484: lgf++; ! 485: skip(); ! 486: em = getrq(); ! 487: } ! 488: ! 489: ! 490: void casefl(void) ! 491: { ! 492: tbreak(); ! 493: if (!ascii) ! 494: ptflush(); ! 495: flusho(); ! 496: } ! 497: ! 498: ! 499: void caseev(void) ! 500: { ! 501: int nxev; ! 502: ! 503: if (skip()) { ! 504: e0: ! 505: if (evi == 0) ! 506: return; ! 507: nxev = evlist[--evi]; ! 508: goto e1; ! 509: } ! 510: noscale++; ! 511: nxev = atoi0(); ! 512: noscale = 0; ! 513: if (nonumb) ! 514: goto e0; ! 515: flushi(); ! 516: if (nxev >= NEV || nxev < 0 || evi >= EVLSZ) { ! 517: flusho(); ! 518: ERROR "cannot do .ev %d", nxev WARN; ! 519: if (error) ! 520: done2(040); ! 521: else ! 522: edone(040); ! 523: return; ! 524: } ! 525: evlist[evi++] = ev; ! 526: e1: ! 527: if (ev == nxev) ! 528: return; ! 529: ev = nxev; ! 530: envp = &env[ev]; ! 531: } ! 532: ! 533: void envcopy(Env *e1, Env *e2) /* copy env e2 to e1 */ ! 534: { ! 535: *e1 = *e2; /* rumor hath that this fails on some machines */ ! 536: } ! 537: ! 538: ! 539: void caseel(void) ! 540: { ! 541: if (--ifx < 0) { ! 542: ifx = 0; ! 543: iflist[0] = 0; ! 544: } ! 545: caseif1(2); ! 546: } ! 547: ! 548: ! 549: void caseie(void) ! 550: { ! 551: if (ifx >= NIF) { ! 552: ERROR "if-else overflow." WARN; ! 553: ifx = 0; ! 554: edone(040); ! 555: } ! 556: caseif1(1); ! 557: ifx++; ! 558: } ! 559: ! 560: ! 561: void caseif(void) ! 562: { ! 563: caseif1(0); ! 564: } ! 565: ! 566: void caseif1(int x) ! 567: { ! 568: extern int falsef; ! 569: int notflag, true; ! 570: Tchar i; ! 571: ! 572: if (x == 2) { ! 573: notflag = 0; ! 574: true = iflist[ifx]; ! 575: goto i1; ! 576: } ! 577: true = 0; ! 578: skip(); ! 579: if ((cbits(i = getch())) == '!') { ! 580: notflag = 1; ! 581: } else { ! 582: notflag = 0; ! 583: ch = i; ! 584: } ! 585: i = atoi0(); ! 586: if (!nonumb) { ! 587: if (i > 0) ! 588: true++; ! 589: goto i1; ! 590: } ! 591: i = getch(); ! 592: switch (cbits(i)) { ! 593: case 'e': ! 594: if (!(numtab[PN].val & 01)) ! 595: true++; ! 596: break; ! 597: case 'o': ! 598: if (numtab[PN].val & 01) ! 599: true++; ! 600: break; ! 601: case 'n': ! 602: if (NROFF) ! 603: true++; ! 604: break; ! 605: case 't': ! 606: if (TROFF) ! 607: true++; ! 608: break; ! 609: case ' ': ! 610: break; ! 611: default: ! 612: true = cmpstr(i); ! 613: } ! 614: i1: ! 615: true ^= notflag; ! 616: if (x == 1) ! 617: iflist[ifx] = !true; ! 618: if (true) { ! 619: i2: ! 620: while ((cbits(i = getch())) == ' ') ! 621: ; ! 622: if (cbits(i) == LEFT) ! 623: goto i2; ! 624: ch = i; ! 625: nflush++; ! 626: } else { ! 627: copyf++; ! 628: falsef++; ! 629: eatblk(0); ! 630: copyf--; ! 631: falsef--; ! 632: } ! 633: } ! 634: ! 635: void eatblk(int inblk) ! 636: { ! 637: int cnt, i; ! 638: ! 639: cnt = 0; ! 640: do { ! 641: if (ch) { ! 642: i = cbits(ch); ! 643: ch = 0; ! 644: } else ! 645: i = cbits(getch0()); ! 646: if (i == ESC) ! 647: cnt++; ! 648: else { ! 649: if (cnt == 1) ! 650: switch (i) { ! 651: case '{': i = LEFT; break; ! 652: case '}': i = RIGHT; break; ! 653: case '\n': i = 'x'; break; ! 654: } ! 655: cnt = 0; ! 656: } ! 657: if (i == LEFT) eatblk(1); ! 658: } while ((!inblk && (i != '\n')) || (inblk && (i != RIGHT))); ! 659: if (i == '\n') ! 660: nlflg++; ! 661: } ! 662: ! 663: ! 664: cmpstr(Tchar c) ! 665: { ! 666: int j, delim; ! 667: Tchar i; ! 668: int val; ! 669: int savapts, savapts1, savfont, savfont1, savpts, savpts1; ! 670: Tchar string[1280]; ! 671: Tchar *sp; ! 672: ! 673: if (ismot(c)) ! 674: return(0); ! 675: delim = cbits(c); ! 676: savapts = apts; ! 677: savapts1 = apts1; ! 678: savfont = font; ! 679: savfont1 = font1; ! 680: savpts = pts; ! 681: savpts1 = pts1; ! 682: sp = string; ! 683: while ((j = cbits(i = getch()))!=delim && j!='\n' && sp<&string[1280-1]) ! 684: *sp++ = i; ! 685: if (sp >= string + 1280) { ! 686: ERROR "too-long string compare." WARN; ! 687: edone(0100); ! 688: } ! 689: if (nlflg) { ! 690: val = sp==string; ! 691: goto rtn; ! 692: } ! 693: *sp = 0; ! 694: apts = savapts; ! 695: apts1 = savapts1; ! 696: font = savfont; ! 697: font1 = savfont1; ! 698: pts = savpts; ! 699: pts1 = savpts1; ! 700: mchbits(); ! 701: val = 1; ! 702: sp = string; ! 703: while ((j = cbits(i = getch())) != delim && j != '\n') { ! 704: if (*sp != i) { ! 705: eat(delim); ! 706: val = 0; ! 707: goto rtn; ! 708: } ! 709: sp++; ! 710: } ! 711: if (*sp) ! 712: val = 0; ! 713: rtn: ! 714: apts = savapts; ! 715: apts1 = savapts1; ! 716: font = savfont; ! 717: font1 = savfont1; ! 718: pts = savpts; ! 719: pts1 = savpts1; ! 720: mchbits(); ! 721: return(val); ! 722: } ! 723: ! 724: ! 725: void caserd(void) ! 726: { ! 727: ! 728: lgf++; ! 729: skip(); ! 730: getname(); ! 731: if (!iflg) { ! 732: if (quiet) { ! 733: if (NROFF) { ! 734: echo_off(); ! 735: flusho(); ! 736: } ! 737: fprintf(stderr, "\007"); /*bell*/ ! 738: } else { ! 739: if (nextf[0]) { ! 740: fprintf(stderr, "%s:", nextf); ! 741: } else { ! 742: fprintf(stderr, "\007"); /*bell*/ ! 743: } ! 744: } ! 745: } ! 746: collect(); ! 747: tty++; ! 748: pushi(RD_OFFSET, PAIR('r','d')); ! 749: } ! 750: ! 751: ! 752: rdtty(void) ! 753: { ! 754: char onechar; ! 755: ! 756: onechar = 0; ! 757: if (read(0, &onechar, 1) == 1) { ! 758: if (onechar == '\n') ! 759: tty++; ! 760: else ! 761: tty = 1; ! 762: if (tty != 3) ! 763: return(onechar); ! 764: } ! 765: tty = 0; ! 766: if (NROFF && quiet) ! 767: echo_on(); ! 768: return(0); ! 769: } ! 770: ! 771: ! 772: void caseec(void) ! 773: { ! 774: eschar = chget('\\'); ! 775: } ! 776: ! 777: ! 778: void caseeo(void) ! 779: { ! 780: eschar = 0; ! 781: } ! 782: ! 783: ! 784: void caseta(void) ! 785: { ! 786: int i; ! 787: ! 788: tabtab[0] = nonumb = 0; ! 789: for (i = 0; ((i < (NTAB - 1)) && !nonumb); i++) { ! 790: if (skip()) ! 791: break; ! 792: tabtab[i] = max(hnumb(&tabtab[max(i-1,0)]), 0) & TABMASK; ! 793: if (!nonumb) ! 794: switch (cbits(ch)) { ! 795: case 'C': ! 796: tabtab[i] |= CTAB; ! 797: break; ! 798: case 'R': ! 799: tabtab[i] |= RTAB; ! 800: break; ! 801: default: /*includes L*/ ! 802: break; ! 803: } ! 804: nonumb = ch = 0; ! 805: } ! 806: tabtab[i] = 0; ! 807: } ! 808: ! 809: ! 810: void casene(void) ! 811: { ! 812: int i, j; ! 813: ! 814: skip(); ! 815: i = vnumb((int *)0); ! 816: if (nonumb) ! 817: i = lss; ! 818: if (i > (j = findt1())) { ! 819: i = lss; ! 820: lss = j; ! 821: dip->nls = 0; ! 822: newline(0); ! 823: lss = i; ! 824: } ! 825: } ! 826: ! 827: ! 828: void casetr(void) ! 829: { ! 830: int i, j; ! 831: Tchar k; ! 832: ! 833: lgf++; ! 834: skip(); ! 835: while ((i = cbits(k=getch())) != '\n') { ! 836: if (ismot(k)) ! 837: return; ! 838: if (ismot(k = getch())) ! 839: return; ! 840: if ((j = cbits(k)) == '\n') ! 841: j = ' '; ! 842: trtab[i] = j; ! 843: } ! 844: } ! 845: ! 846: ! 847: void casecu(void) ! 848: { ! 849: cu++; ! 850: caseul(); ! 851: } ! 852: ! 853: ! 854: void caseul(void) ! 855: { ! 856: int i; ! 857: ! 858: noscale++; ! 859: if (skip()) ! 860: i = 1; ! 861: else ! 862: i = atoi0(); ! 863: if (ul && (i == 0)) { ! 864: font = sfont; ! 865: ul = cu = 0; ! 866: } ! 867: if (i) { ! 868: if (!ul) { ! 869: sfont = font; ! 870: font = ulfont; ! 871: } ! 872: ul = i; ! 873: } ! 874: noscale = 0; ! 875: mchbits(); ! 876: } ! 877: ! 878: ! 879: void caseuf(void) ! 880: { ! 881: int i, j; ! 882: ! 883: if (skip() || !(i = getrq()) || i == 'S' || (j = findft(i)) == -1) ! 884: ulfont = ULFONT; /*default underline position*/ ! 885: else ! 886: ulfont = j; ! 887: if (NROFF && ulfont == FT) ! 888: ulfont = ULFONT; ! 889: } ! 890: ! 891: ! 892: void caseit(void) ! 893: { ! 894: int i; ! 895: ! 896: lgf++; ! 897: it = itmac = 0; ! 898: noscale++; ! 899: skip(); ! 900: i = atoi0(); ! 901: skip(); ! 902: if (!nonumb && (itmac = getrq())) ! 903: it = i; ! 904: noscale = 0; ! 905: } ! 906: ! 907: ! 908: void casemc(void) ! 909: { ! 910: int i; ! 911: ! 912: if (icf > 1) ! 913: ic = 0; ! 914: icf = 0; ! 915: if (skip()) ! 916: return; ! 917: ic = getch(); ! 918: icf = 1; ! 919: skip(); ! 920: i = max(hnumb((int *)0), 0); ! 921: if (!nonumb) ! 922: ics = i; ! 923: } ! 924: ! 925: ! 926: void casemk(void) ! 927: { ! 928: int i, j; ! 929: ! 930: if (dip != d) ! 931: j = dip->dnl; ! 932: else ! 933: j = numtab[NL].val; ! 934: if (skip()) { ! 935: dip->mkline = j; ! 936: return; ! 937: } ! 938: if ((i = getrq()) == 0) ! 939: return; ! 940: numtab[findr(i)].val = j; ! 941: } ! 942: ! 943: ! 944: void casesv(void) ! 945: { ! 946: int i; ! 947: ! 948: skip(); ! 949: if ((i = vnumb((int *)0)) < 0) ! 950: return; ! 951: if (nonumb) ! 952: i = 1; ! 953: sv += i; ! 954: caseos(); ! 955: } ! 956: ! 957: ! 958: void caseos(void) ! 959: { ! 960: int savlss; ! 961: ! 962: if (sv <= findt1()) { ! 963: savlss = lss; ! 964: lss = sv; ! 965: newline(0); ! 966: lss = savlss; ! 967: sv = 0; ! 968: } ! 969: } ! 970: ! 971: ! 972: void casenm(void) ! 973: { ! 974: int i; ! 975: ! 976: lnmod = nn = 0; ! 977: if (skip()) ! 978: return; ! 979: lnmod++; ! 980: noscale++; ! 981: i = inumb(&numtab[LN].val); ! 982: if (!nonumb) ! 983: numtab[LN].val = max(i, 0); ! 984: getnm(&ndf, 1); ! 985: getnm(&nms, 0); ! 986: getnm(&ni, 0); ! 987: getnm(&nmwid, 3); /* really kludgy! */ ! 988: noscale = 0; ! 989: nmbits = chbits; ! 990: } ! 991: ! 992: ! 993: void getnm(int *p, int min) ! 994: { ! 995: int i; ! 996: ! 997: eat(' '); ! 998: if (skip()) ! 999: return; ! 1000: i = atoi0(); ! 1001: if (nonumb) ! 1002: return; ! 1003: *p = max(i, min); ! 1004: } ! 1005: ! 1006: ! 1007: void casenn(void) ! 1008: { ! 1009: noscale++; ! 1010: skip(); ! 1011: nn = max(atoi0(), 1); ! 1012: noscale = 0; ! 1013: } ! 1014: ! 1015: ! 1016: void caseab(void) ! 1017: { ! 1018: casetm1(1); ! 1019: done3(0); ! 1020: } ! 1021: ! 1022: ! 1023: /* nroff terminal handling has been pretty well excised */ ! 1024: /* as part of the merge with troff. these are ghostly remnants, */ ! 1025: /* called, but doing nothing. restore them at your peril. */ ! 1026: ! 1027: ! 1028: void save_tty(void) /*save any tty settings that may be changed*/ ! 1029: { ! 1030: } ! 1031: ! 1032: ! 1033: void restore_tty(void) /*restore tty settings from beginning*/ ! 1034: { ! 1035: } ! 1036: ! 1037: ! 1038: void set_tty(void) ! 1039: { ! 1040: } ! 1041: ! 1042: ! 1043: void echo_off(void) /*turn off ECHO for .rd in "-q" mode*/ ! 1044: { ! 1045: } ! 1046: ! 1047: ! 1048: void echo_on(void) /*restore ECHO after .rd in "-q" mode*/ ! 1049: { ! 1050: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.