|
|
1.1 ! root 1: /* ! 2: * req1.c ! 3: * Nroff/Troff. ! 4: * Requests (a-m). ! 5: */ ! 6: ! 7: #include <ctype.h> ! 8: #include "roff.h" ! 9: ! 10: /* ! 11: * User abort. ! 12: */ ! 13: req_ab() ! 14: { ! 15: register char *bp; ! 16: ! 17: bp = nextarg(miscbuf, NULL, 0); ! 18: if (*bp != '\0') ! 19: fprintf(stderr, "%s\n", bp); ! 20: else ! 21: fprintf(stderr, "User abort\n"); ! 22: leave(1); ! 23: } ! 24: ! 25: /* ! 26: * Turn adjust mode on and set adjust type. ! 27: */ ! 28: req_ad(argc, argv) int argc; char *argv[]; ! 29: { ! 30: adm = 1; ! 31: if (argc < 2) ! 32: return; ! 33: switch (argv[1][0]) { ! 34: case 'l': ! 35: adj = LJUS; ! 36: return; ! 37: case 'c': ! 38: adj = CJUS; ! 39: return; ! 40: case 'r': ! 41: adj = RJUS; ! 42: return; ! 43: case 'b': ! 44: case 'u': ! 45: adj = FJUS; ! 46: return; ! 47: default: ! 48: printe("bad adjustment type"); ! 49: return; ! 50: } ! 51: } ! 52: ! 53: /* ! 54: * Assign format. ! 55: */ ! 56: req_af(argc, argv) int argc; char *argv[]; ! 57: { ! 58: register REG *rp; ! 59: int n; ! 60: char name[2]; ! 61: register char *p, c; ! 62: ! 63: argname(argv[1], name); ! 64: rp = getnreg(name); ! 65: if (index("iIaA", c=argv[2][0])) { ! 66: rp->n_reg.r_form = c; ! 67: return; ! 68: } ! 69: if (isascii(c) && isdigit(c)) { ! 70: n = '0'; ! 71: p = &argv[2][1]; ! 72: while (isascii(c = *p++) && isdigit(*p)) ! 73: ; ! 74: if (p-argv[2] > 9) { ! 75: printe("field with too large"); ! 76: return; ! 77: } ! 78: rp->n_reg.r_form = '0' + p-argv[2]; ! 79: } ! 80: } ! 81: ! 82: /* ! 83: * Append to macro. ! 84: */ ! 85: req_am(argc, argv) int argc; char *argv[]; ! 86: { ! 87: register REG *rp; ! 88: register MAC *mp; ! 89: char name[2]; ! 90: ! 91: argname(argv[1], name); ! 92: if ((rp=findreg(name, RTEXT)) == NULL) { ! 93: rp = makereg(name, RTEXT); ! 94: mp = &rp->t_reg.r_macd; ! 95: } else { ! 96: for (mp = &rp->t_reg.r_macd; ! 97: mp->t_div.m_next; ! 98: mp=mp->t_div.m_next) ! 99: ; ! 100: mp->t_div.m_next = (MAC *)nalloc(sizeof (*mp)); ! 101: mp = mp->t_div.m_next; ! 102: } ! 103: deftext(mp, argv[2]); ! 104: } ! 105: ! 106: /* ! 107: * Append to string. ! 108: */ ! 109: req_as(argc, argv) int argc; char *argv[]; ! 110: { ! 111: register REG *rp; ! 112: register MAC *mp; ! 113: char name[2]; ! 114: register char *cp; ! 115: ! 116: argname(argv[1], name); ! 117: if ((rp=findreg(name, RTEXT)) == NULL) { ! 118: rp = makereg(name, RTEXT); ! 119: mp = &rp->t_reg.r_macd; ! 120: } else { ! 121: for (mp = &rp->t_reg.r_macd; mp->t_div.m_next; mp=mp->t_div.m_next) ! 122: ; ! 123: mp->t_div.m_next = (MAC *)nalloc(sizeof *mp); ! 124: mp = mp->t_div.m_next; ! 125: } ! 126: cp = nalloc(strlen(argv[2]) + 1); ! 127: strcpy(cp, argv[2]); ! 128: mp->t_div.m_next = NULL; ! 129: mp->t_div.m_type = MTEXT; ! 130: mp->t_div.m_core = cp; ! 131: } ! 132: ! 133: /* ! 134: * Embolden. (.bd) $$TO_DO$$ ! 135: */ ! 136: req_bd(argc, argv) int argc; char *argv[]; ! 137: { ! 138: printu(".bd"); ! 139: } ! 140: ! 141: /* ! 142: * Overstrike bold command. ! 143: * !V7. ! 144: */ ! 145: req_bo(argc, argv) int argc; char *argv[]; ! 146: { ! 147: if (argc == 1) ! 148: enb++; ! 149: else ! 150: enb = atoi(argv[1]); ! 151: } ! 152: ! 153: /* ! 154: * Begin page. ! 155: */ ! 156: req_bp(argc, argv) int argc; char *argv[]; ! 157: { ! 158: setbreak(); ! 159: if (argc >= 2) { ! 160: npn = numb(argv[1], SMUNIT, SDUNIT); ! 161: pspace(); ! 162: return; ! 163: } ! 164: if (nsm == 0) ! 165: pspace(); ! 166: } ! 167: ! 168: /* ! 169: * Break. ! 170: */ ! 171: req_br() ! 172: { ! 173: setbreak(); ! 174: } ! 175: ! 176: /* ! 177: * Set nobreak control character. ! 178: */ ! 179: req_c2(argc, argv) int argc; char *argv[]; ! 180: { ! 181: nbc = argc>1 ? argv[1][0] : '\''; ! 182: } ! 183: ! 184: /* ! 185: * Set control character. ! 186: */ ! 187: req_cc(argc, argv) int argc; char *argv[]; ! 188: { ! 189: ccc = argc>1 ? argv[1][0] : '.'; ! 190: } ! 191: ! 192: /* ! 193: * Center all text. ! 194: */ ! 195: req_ce(argc, argv) int argc; char *argv[]; ! 196: { ! 197: setbreak(); ! 198: cec = number(argv[1], SMUNIT, SDUNIT, 0, 0, 1); ! 199: } ! 200: ! 201: /* ! 202: * Change trap location. ! 203: */ ! 204: req_ch(argc, argv) int argc; char *argv[]; ! 205: { ! 206: register TPL **tpp, *tp; ! 207: register DIV *dp; ! 208: int rpos, apos; ! 209: char name[2]; ! 210: ! 211: dp = mdivp; ! 212: argname(argv[1], name); ! 213: for (tpp = &dp->d_stpl; tp = *tpp; tpp = &tp->t_next) { ! 214: if (name[0]==tp->t_name[0] && name[1]==tp->t_name[1]) { ! 215: if (dp->d_trap == tp) ! 216: dp->d_trap = tp->t_next; ! 217: if (dp->d_ctpp == tp) ! 218: dp->d_ctpp = tp->t_next; ! 219: *tpp = tp->t_next; ! 220: nfree(tp); ! 221: break; ! 222: } ! 223: } ! 224: if (argc >= 3) { ! 225: rpos = numb(argv[2], SMVLSP, SDVLSP); ! 226: apos = rpos>=0 ? rpos : pgl+rpos; ! 227: for (tpp = &dp->d_stpl; tp = *tpp; tpp = &tp->t_next) { ! 228: if (apos <= tp->t_apos) ! 229: break; ! 230: } ! 231: tp = (TPL *)nalloc(sizeof (TPL)); ! 232: tp->t_rpos = rpos; ! 233: tp->t_apos = apos; ! 234: tp->t_name[0] = name[0]; ! 235: tp->t_name[1] = name[1]; ! 236: tp->t_next = *tpp; ! 237: *tpp = tp; ! 238: if (dp->d_trap==tp->t_next && apos>=0) ! 239: dp->d_trap = tp; ! 240: if (dp->d_ctpp==tp->t_next && apos>=dp->d_rpos) ! 241: dp->d_ctpp = tp; ! 242: } ! 243: } ! 244: ! 245: /* ! 246: * Copy input verbatim to output. ! 247: * !V7. ! 248: * Added by steve 12/21/90, usage modified 6/19/91. ! 249: */ ! 250: req_co(argc, argv) int argc; char *argv[]; ! 251: { ! 252: register char *cp, *endmark; ! 253: register int c, i; ! 254: char *cp1; ! 255: ! 256: putchar('\n'); ! 257: for (i = 1; i < argc; i++) ! 258: printf("%d ", number(argv[i], SMUNIT, SDUNIT, 0, 0, 0)); ! 259: cp = endmark = ".co"; ! 260: while ((c = getl(1)) != EOF) { ! 261: if (c == *cp) { /* match next endmark char */ ! 262: cp++; ! 263: continue; ! 264: } else if (c == '\n' && *cp == '\0') ! 265: return; /* matched endmark, done */ ! 266: for (cp1 = endmark; cp1 < cp; ) ! 267: putchar(*cp1++); /* copy matched portion */ ! 268: putchar(c); /* copy this character */ ! 269: cp = endmark; /* try again from start */ ! 270: } ! 271: printe(".co: unexpected EOF before %s", endmark); ! 272: } ! 273: ! 274: /* ! 275: * Set constant character space mode. ! 276: */ ! 277: req_cs(argc, argv) int argc; char *argv[]; ! 278: { ! 279: char name[2]; ! 280: register int n, ems; ! 281: ! 282: argname(argv[1], name); ! 283: if ((n = font_number(name, ".cs: ")) < 0) ! 284: return; ! 285: ems = number(argv[3], SMPOIN, SDPOIN, 0, 0, unit(SMEMSP, SDEMSP)); ! 286: dev_cs(n, numb(argv[2], (long)ems, 36L)); ! 287: } ! 288: ! 289: /* ! 290: * Continous underline. ! 291: * This just does a .ul. ! 292: * This is wrong, .cu is supposed to underline spaces as well as words. ! 293: */ ! 294: req_cu(argc, argv) int argc; char *argv[]; ! 295: { ! 296: req_ul(argc, argv); ! 297: } ! 298: ! 299: /* ! 300: * Divert and append output to macro. ! 301: */ ! 302: req_da(argc, argv) int argc; char *argv[]; ! 303: { ! 304: register REG *rp; ! 305: register MAC *mp; ! 306: char name[2]; ! 307: ! 308: if (argc < 2) { ! 309: enddivn(); ! 310: return; ! 311: } ! 312: argname(argv[1], name); ! 313: newdivn(name); ! 314: if ((rp=findreg(name, RTEXT)) == NULL) { ! 315: rp = makereg(name, RTEXT); ! 316: cdivp->d_seek = tmpseek; ! 317: mp = &rp->t_reg.r_macd; ! 318: mp->t_div.m_next = NULL; ! 319: } else { ! 320: cdivp->d_maxh = rp->t_reg.r_maxh; ! 321: cdivp->d_maxw = rp->t_reg.r_maxw; ! 322: for (mp = &rp->t_reg.r_macd; mp->t_div.m_next; mp=mp->t_div.m_next) ! 323: ; ! 324: } ! 325: mp->t_div.m_type = MDIVN; ! 326: mp->t_div.m_size = 0; ! 327: mp->t_div.m_core = NULL; ! 328: mp->t_div.m_seek = tmpseek; ! 329: cdivp->d_macp = mp; ! 330: } ! 331: ! 332: /* ! 333: * Define a special character. ! 334: * Added by steve 4/16/91. ! 335: */ ! 336: req_dc(argc, argv) int argc; char *argv[]; ! 337: { ! 338: char name[2]; ! 339: ! 340: argname(argv[1], name); ! 341: spc_def(name, (argc < 3) ? "" : argv[2]); ! 342: } ! 343: ! 344: /* ! 345: * Define a macro. ! 346: */ ! 347: req_de(argc, argv) int argc; char *argv[]; ! 348: { ! 349: register REG *rp; ! 350: char name[2]; ! 351: ! 352: argname(argv[1], name); ! 353: rp = makereg(name, RTEXT); ! 354: deftext(&rp->t_reg.r_macd, argv[2]); ! 355: } ! 356: ! 357: /* ! 358: * Divert output to macro. ! 359: */ ! 360: req_di(argc, argv) int argc; char *argv[]; ! 361: { ! 362: register REG *rp; ! 363: char name[2]; ! 364: ! 365: if (argc < 2) { ! 366: enddivn(); ! 367: return; ! 368: } ! 369: argname(argv[1], name); ! 370: newdivn(name); ! 371: rp = makereg(name, RTEXT); ! 372: cdivp->d_macp = &rp->t_reg.r_macd; ! 373: cdivp->d_seek = tmpseek; ! 374: rp->t_reg.r_macd.t_div.m_next = NULL; ! 375: rp->t_reg.r_macd.t_div.m_type = MDIVN; ! 376: rp->t_reg.r_macd.t_div.m_size = 0; ! 377: rp->t_reg.r_macd.t_div.m_core = NULL; ! 378: rp->t_reg.r_macd.t_div.m_seek = tmpseek; ! 379: } ! 380: ! 381: /* ! 382: * Define a string. ! 383: */ ! 384: req_ds(argc, argv) int argc; char *argv[]; ! 385: { ! 386: register REG *rp; ! 387: char name[2]; ! 388: register char *cp; ! 389: ! 390: argname(argv[1], name); ! 391: rp = makereg(name, RTEXT); ! 392: cp = nalloc(strlen(argv[2]) + 1); ! 393: strcpy(cp, argv[2]); ! 394: rp->t_reg.r_macd.t_div.m_next = NULL; ! 395: rp->t_reg.r_macd.t_div.m_type = MTEXT; ! 396: rp->t_reg.r_macd.t_div.m_core = cp; ! 397: } ! 398: ! 399: /* ! 400: * Set a diversion trap. (.dt) $$TO_DO$$ ! 401: */ ! 402: req_dt(argc, argv) int argc; char *argv[]; ! 403: { ! 404: printu(".dt"); ! 405: } ! 406: ! 407: /* ! 408: * Set escape character. ! 409: */ ! 410: req_ec(argc, argv) int argc; char *argv[]; ! 411: { ! 412: esc = argc>1 ? argv[1][0] : '\\'; ! 413: } ! 414: ! 415: /* ! 416: * Else part of if-else. ! 417: */ ! 418: req_el(argc, argv) int argc; char *argv[]; ! 419: { ! 420: if (iestackx < 0) { ! 421: printe(".el without .ie"); ! 422: return; ! 423: } ! 424: do_cond(!iestack[iestackx--], nextarg(miscbuf, NULL, 0)); ! 425: } ! 426: ! 427: /* ! 428: * Set end macro. ! 429: */ ! 430: req_em(argc, argv) int argc; char *argv[]; ! 431: { ! 432: argname(argv[1], endtrap); ! 433: } ! 434: ! 435: /* ! 436: * Turn off escape mechanism. ! 437: */ ! 438: req_eo() ! 439: { ! 440: esc = '\0'; ! 441: } ! 442: ! 443: /* ! 444: * Change environments. ! 445: */ ! 446: req_ev(argc, argv) int argc; char *argv[]; ! 447: { ! 448: register int old, new; ! 449: ! 450: if (argc < 2) { ! 451: dprintd(DBGENVR, "pop environment\n"); ! 452: if (envs == 0) { ! 453: printe("cannot pop environment"); ! 454: return; ! 455: } ! 456: old = envstak[envs]; ! 457: new = envstak[--envs]; ! 458: } else { ! 459: new = numb(argv[1], SMUNIT, SDUNIT); ! 460: dprint2(DBGENVR, "push environment %d\n", new); ! 461: if (new < 0 || new >= ENVS) { ! 462: printe("environment does not exist"); ! 463: return; ! 464: } ! 465: if (envs >= ENVSTACK) { ! 466: printe("environments stacked too deeply"); ! 467: return; ! 468: } ! 469: old = envstak[envs]; ! 470: envstak[++envs] = new; ! 471: } ! 472: dprint2(DBGENVR|DBGFILE, "writing environment %d\n", old); ! 473: envsave(old); ! 474: if (envinit[new] == 0) { ! 475: dprint2(DBGENVR, "initializing env %d\n", new); ! 476: envset(); ! 477: envinit[new] = 1; ! 478: setfont("R", 1); ! 479: } else { ! 480: dprint2(DBGENVR|DBGFILE, "reading environment %d\n", new); ! 481: envload(new); ! 482: } ! 483: } ! 484: ! 485: /* ! 486: * Exit from nroff. ! 487: */ ! 488: req_ex() ! 489: { ! 490: leave(0); ! 491: } ! 492: ! 493: /* ! 494: * Flush the buffers (used for transparent flushing...) ! 495: * !V7. ! 496: */ ! 497: req_fb() ! 498: { ! 499: flushl(linebuf, llinptr); /* Flush the buffer... */ ! 500: llinptr = linebuf; /* Reset the buffer... */ ! 501: } ! 502: ! 503: /* ! 504: * Set field delimiter and pad character. (.fc) $$TO_DO$$ ! 505: */ ! 506: req_fc(argc, argv) int argc; char *argv[]; ! 507: { ! 508: printu(".fc"); ! 509: } ! 510: ! 511: /* ! 512: * Display a list of fonts to standard error. ! 513: * !V7. ! 514: */ ! 515: req_fd() ! 516: { ! 517: font_display(); ! 518: } ! 519: ! 520: /* ! 521: * Turn on fill mode. ! 522: */ ! 523: req_fi() ! 524: { ! 525: setbreak(); ! 526: fill = 1; ! 527: } ! 528: ! 529: /* ! 530: * Flush. ! 531: */ ! 532: req_fl() ! 533: { ! 534: setbreak(); ! 535: } ! 536: ! 537: /* ! 538: * Define font at position. ! 539: */ ! 540: req_fp(argc, argv) int argc; char *argv[]; ! 541: { ! 542: register int n; ! 543: ! 544: n = argv[1][0] - '0'; ! 545: if ((1 <= n) && (n <= 9)) { ! 546: mapfont[n][0] = argv[2][0]; ! 547: mapfont[n][1] = argv[2][1]; ! 548: } else ! 549: printe("font position out of range"); ! 550: ! 551: } ! 552: ! 553: /* ! 554: * Set current font. ! 555: */ ! 556: req_ft(argc, argv) int argc; char *argv[]; ! 557: { ! 558: char name[2]; ! 559: ! 560: argname(argv[1], name); ! 561: setfont(name, 1); ! 562: } ! 563: ! 564: /* ! 565: * Force font size. ! 566: */ ! 567: req_fz(argc, argv) int argc; char *argv[]; ! 568: { ! 569: if (argc != 3) ! 570: printe(".fz: requires font name and size"); ! 571: else ! 572: dev_fz(argv[1], argv[2]); ! 573: } ! 574: ! 575: /* ! 576: * Hyphenation mode. (.hc) $$TO_DO$$ ! 577: */ ! 578: req_hc(argc, argv) int argc; char *argv[]; ! 579: { ! 580: printu(".hc"); ! 581: } ! 582: ! 583: /* ! 584: * Hyphenation indicator character. (.hw) $$TO_DO$$ ! 585: */ ! 586: req_hw(argc, argv) int argc; char *argv[]; ! 587: { ! 588: printu(".hw"); ! 589: } ! 590: ! 591: /* ! 592: * Hyphenation exception words. (.hy) $$TO_DO$$ ! 593: */ ! 594: req_hy(argc, argv) int argc; char *argv[]; ! 595: { ! 596: printu(".hy"); ! 597: } ! 598: ! 599: /* ! 600: * If part of if-else. ! 601: */ ! 602: req_ie(argc, argv) int argc; char *argv[]; ! 603: { ! 604: if (iestackx >= IESTACKSIZE-1) ! 605: printe(".ie nested more than %d levels", IESTACKSIZE); ! 606: else ! 607: iestack[++iestackx] = req_if(argc, argv); ! 608: } ! 609: ! 610: /* ! 611: * If (conditional execution of command). ! 612: * This returns the condition and is called from 'req_ie'. ! 613: */ ! 614: req_if() ! 615: { ! 616: int not, con; ! 617: unsigned char charbuf[CBFSIZE]; ! 618: register int c; ! 619: register unsigned char *bp, *cp, *cp1, *cp2; ! 620: ! 621: bp = (unsigned char *)nextarg(miscbuf, NULL, 0); ! 622: ! 623: /* Look for leading '!'. */ ! 624: if (*bp == '!') { ! 625: bp++; ! 626: not = 1; ! 627: } else ! 628: not = 0; ! 629: ! 630: /* Look for built-ins. */ ! 631: switch (*bp++) { ! 632: case 'e': /* Current page number is even. */ ! 633: con = !(pno % 2); ! 634: break; ! 635: case 'l': ! 636: con = lflag; /* Landscape mode. */ ! 637: break; ! 638: case 'n': /* Formatter is Nroff. */ ! 639: con = (ntroff == NROFF); ! 640: break; ! 641: case 'o': /* Current page number is odd. */ ! 642: con = pno % 2; ! 643: break; ! 644: case 'p': ! 645: con = pflag; /* PostScript mode. */ ! 646: break; ! 647: case 't': /* Formatter is Troff. */ ! 648: con = (ntroff == TROFF); ! 649: break; ! 650: default: ! 651: c = *--bp; /* first character */ ! 652: if ((isascii(c) && isdigit(c)) || c == '(' || c == '+' || c == '-') { ! 653: /* Numeric expression. */ ! 654: bp = (unsigned char *)nextarg(bp, charbuf, CBFSIZE); ! 655: con = numb(charbuf, SMUNIT, SDUNIT) != 0; ! 656: break; ! 657: } ! 658: ! 659: /* String comparison. */ ! 660: con = 0; ! 661: if (c == '\0') ! 662: break; ! 663: cp1 = ++bp; /* start of first string */ ! 664: if ((cp = index(cp1, c)) == NULL) ! 665: break; ! 666: cp2 = ++cp; /* start of second string */ ! 667: if ((cp = index(cp2, c)) == NULL) ! 668: break; ! 669: bp = cp + 1; /* bp points after third c */ ! 670: if (cp - cp2 != (cp2-1) - cp1) ! 671: break; /* lengths differ, unequal */ ! 672: con = strncmp(cp1, cp2, cp - cp2) == 0; /* compare strings */ ! 673: } ! 674: if (not) ! 675: con = !con; ! 676: do_cond(con, bp); ! 677: return con; ! 678: } ! 679: ! 680: /* ! 681: * Ignore. ! 682: */ ! 683: req_ig(argc, argv) int argc; char *argv[]; ! 684: { ! 685: deftext(NULL, argv[1]); ! 686: } ! 687: ! 688: /* ! 689: * Set indent. ! 690: */ ! 691: req_in(argc, argv) int argc; char *argv[]; ! 692: { ! 693: setval(&ind, &oldind, argv[1], SMEMSP, SDEMSP); ! 694: setbreak(); ! 695: } ! 696: ! 697: ! 698: /* ! 699: * Set an input line count trap. ! 700: */ ! 701: req_it(argc, argv) int argc; char *argv[]; ! 702: { ! 703: if (argc < 3) { ! 704: inpltrc = 0; ! 705: return; ! 706: } ! 707: inpltrc = numb(argv[1], SMUNIT, SDUNIT); ! 708: argname(argv[2], inptrap); ! 709: } ! 710: ! 711: /* ! 712: * Leader repetition character. ! 713: */ ! 714: req_lc(argc, argv) int argc; char *argv[]; ! 715: { ! 716: ldc = (argc < 1) ? '\0' : argv[1][0]; ! 717: } ! 718: ! 719: /* ! 720: * Load a font width table. ! 721: * !V7. ! 722: * Added by steve 12/12/90. ! 723: */ ! 724: req_lf(argc, argv) int argc; char *argv[]; ! 725: { ! 726: if (argc < 3) { ! 727: printe(".lf: requires fontname and filename"); ! 728: return; ! 729: } ! 730: load_font(argv[1], argv[2]); ! 731: if (argc == 4) ! 732: dev_fz(argv[1], argv[3]); ! 733: } ! 734: ! 735: /* ! 736: * Set ligature mode. ! 737: */ ! 738: req_lg(argc, argv) int argc; char *argv[]; ! 739: { ! 740: lgm = numb(argv[1], SMUNIT, SDUNIT) > 0; ! 741: } ! 742: ! 743: /* ! 744: * Set line length. ! 745: */ ! 746: req_ll(argc, argv) int argc; char *argv[]; ! 747: { ! 748: setval(&lln, &oldlln, argv[1], SMEMSP, SDEMSP); ! 749: } ! 750: ! 751: /* ! 752: * Set line spacing. ! 753: */ ! 754: req_ls(argc, argv) int argc; char *argv[]; ! 755: { ! 756: setval(&lsp, &oldlsp, argv[1], SMUNIT, SDUNIT); ! 757: } ! 758: ! 759: /* ! 760: * Set title length. ! 761: */ ! 762: req_lt(argc, argv) int argc; char *argv[]; ! 763: { ! 764: setval(&tln, &oldtln, argv[1], SMEMSP, SDEMSP); ! 765: } ! 766: ! 767: /* ! 768: * Set margin character. ! 769: */ ! 770: req_mc(argc, argv) int argc; char *argv[]; ! 771: { ! 772: if (argc < 2) { ! 773: mrc = '\0'; ! 774: } else { ! 775: mrc = argv[1][0]; ! 776: #ifdef mfn ! 777: /* Margin font number (if required later...) */ ! 778: mfn = curfont; ! 779: #endif ! 780: } ! 781: if (argc > 2) ! 782: mar = number(argv[2], SMEMSP, SDEMSP, mar, 0, 0); ! 783: } ! 784: ! 785: /* ! 786: * Mark vertical place internally in diversion or in number register. ! 787: */ ! 788: req_mk(argc, argv) int argc; char *argv[]; ! 789: { ! 790: register REG *rp; ! 791: char name[2]; ! 792: ! 793: if (argc == 1) { ! 794: cdivp->d_mk = cdivp->d_rpos; ! 795: return; ! 796: } ! 797: argname(argv[1], name); ! 798: if ((rp=findreg(name, RNUMR)) == NULL) { ! 799: rp = makereg(name, RNUMR); ! 800: rp->n_reg.r_incr = 1; ! 801: rp->n_reg.r_form = '1'; ! 802: } ! 803: rp->n_reg.r_nval = cdivp->d_rpos; ! 804: } ! 805: ! 806: /* end of req1.c */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.