Annotation of coherent/b/bin/troff/req1.c, revision 1.1.1.1

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 */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.