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

1.1       root        1: /*
                      2:  * req2.c
                      3:  * Nroff/Troff.
                      4:  * Requests (n-z).
                      5:  */
                      6: 
                      7: #include <ctype.h>
                      8: #include "roff.h"
                      9: 
                     10: #define A_BEL  0x07    /* Bell                 */
                     11: #define A_DEL  0x7F    /* Delete               */
                     12: 
                     13: /*
                     14:  * Turn adjust mode off.
                     15:  */
                     16: req_na()
                     17: {
                     18:        adm = 0;
                     19: }
                     20: 
                     21: /*
                     22:  * Overstrike bold off.
                     23:  * !V7.
                     24:  */
                     25: req_nb()
                     26: {
                     27:        enb = 0;
                     28: }
                     29: 
                     30: /*
                     31:  * Need.
                     32:  */
                     33: req_ne(argc, argv) int argc; char *argv[];
                     34: {
                     35:        register int    need,
                     36:                        have;
                     37: 
                     38:        need = number(argv[1], SMVLSP, SDVLSP, 0, 1, unit(SMVLSP, SDVLSP));
                     39:        if (cdivp->d_ctpp) {
                     40:                have = cdivp->d_ctpp->t_apos;
                     41:                if (have > pgl)
                     42:                        have = pgl;
                     43:        } else
                     44:                have = pgl;
                     45:        have -= cdivp->d_rpos;
                     46:        if (have >= need || nsm != 0)
                     47:                return;
                     48:        setbreak();
                     49:        sspace(have);
                     50: }
                     51: 
                     52: /*
                     53:  * Go into no fill mode.
                     54:  */
                     55: req_nf()
                     56: {
                     57:        setbreak();
                     58:        fill = 0;
                     59: }
                     60: 
                     61: /*
                     62:  * Turn off hyphenation.
                     63:  */
                     64: req_nh()
                     65: {
                     66:        hyp = 0;                /* turn the durn thing off */
                     67: }
                     68: 
                     69: /*
                     70:  * Set number mode.                            (.nm)   $$TO_DO$$
                     71:  */
                     72: req_nm(argc, argv) int argc; char *argv[];
                     73: {
                     74: #if    1
                     75:        printu(".nm");
                     76: #else
                     77:        long    smdigw, sddigw;
                     78: 
                     79:        smdigw = width('0') * swddiv;
                     80:        sddigw = swddiv;
                     81:        if ((lnn=number(argv[1], SMUNIT, SDUNIT, lnn, 0, 0)) <= 0) {
                     82:                lnn = 0;
                     83:                return;
                     84:        }
                     85:        if (argv[2][0] != '\0')
                     86:                lnm = number(argv[2], SMUNIT, SDUNIT, 0, 0, 1);
                     87:        if (argv[3][0] != '\0')
                     88:                lns = number(argv[3], smdigw, sddigw, 0, 0, unit(smdigw, sddigw));
                     89:        if (argv[4][0] != '\0')
                     90:                lni = number(argv[4], smdigw, sddigw, 0, 0, unit(smdigw, sddigw);
                     91: #endif
                     92: }
                     93: 
                     94: /*
                     95:  * Turn off line number mode for n lines.      (.nn)   $$TO_DO$$
                     96:  */
                     97: req_nn(argc, argv) int argc; char *argv[];
                     98: {
                     99: #if    1
                    100:        printu(".nn");
                    101: #else
                    102:        register int n;
                    103: 
                    104:        lnc = number(argv[1], SMUNIT, SDUNIT, 0, 0, 1);
                    105: #endif
                    106: }
                    107: 
                    108: /*
                    109:  * Define a number register.
                    110:  */
                    111: req_nr(argc, argv) int argc; char *argv[];
                    112: {
                    113:        register REG *rp;
                    114:        char name[2];
                    115: 
                    116:        argname(argv[1], name);
                    117: #if    0
                    118:        rp = getnreg(name, RNUMR);      /* too many paramters!  */
                    119: #else
                    120:        rp = getnreg(name);
                    121: #endif
                    122:        rp->n_reg.r_nval = number(argv[2], SMUNIT, SDUNIT, rp->n_reg.r_nval, 0, 0);
                    123:        if (argc >= 4)
                    124:                rp->n_reg.r_incr = numb(argv[3], SMUNIT, SDUNIT);
                    125:        if (rp == nrpnreg)
                    126:                npn = pno + 1;
                    127: }
                    128: 
                    129: /*
                    130:  * Turn no-space mode on.
                    131:  */
                    132: req_ns()
                    133: {
                    134:        nsm = 1;
                    135: }
                    136: 
                    137: /*
                    138:  * End input from current file and switch to given file.
                    139:  */
                    140: req_nx(argc, argv) int argc; char *argv[];
                    141: {
                    142:        register FILE *fp;
                    143:        register STR *sp;
                    144: 
                    145:        sp = strp;
                    146:        do {
                    147:                if (sp == NULL) {
                    148:                        printe("cannot find current file");
                    149:                        return;
                    150:                }
                    151:        } while (sp->x2.s_type != SFILE);
                    152:        if ((fp = fopen(argv[1], "r")) == NULL) {
                    153:                printe("cannot open %s", argv[1]);
                    154:                return;
                    155:        }
                    156:        fclose(sp->x2.s_fp);
                    157:        sp->x2.s_fp = fp;
                    158:        nfree(sp->x2.s_fname);
                    159:        sp->x2.s_fname = duplstr(argv[1]);
                    160:        sp->x2.s_clnc = 1;
                    161:        sp->x2.s_nlnc = 1;
                    162: }
                    163: 
                    164: /*
                    165:  * Output saved space.
                    166:  */
                    167: req_os()
                    168: {
                    169:        sspace(svs);
                    170: }
                    171: 
                    172: /*
                    173:  * Set page number character in title.
                    174:  */
                    175: req_pc(argc, argv) int argc; char *argv[];
                    176: {
                    177:        tpc = argv[1][0];
                    178: }
                    179: 
                    180: /*
                    181:  * Pipe nroff output.                          (.pi)   $$TO_DO$$
                    182:  */
                    183: req_pi(argc, argv) int argc; char *argv[];
                    184: {
                    185:        printu(".pi");
                    186: }
                    187: 
                    188: /*
                    189:  * Set page length.
                    190:  */
                    191: req_pl(argc, argv) int argc; char *argv[];
                    192: {
                    193:        pgl = number(argv[1], SMVLSP, SDVLSP, pgl, 0, unit(11*SMINCH, SDINCH));
                    194:        if (pgl == 0)
                    195:                pgl = unit(SMVLSP, SDVLSP);
                    196: }
                    197: 
                    198: /*
                    199:  * Print sizes of macros.
                    200:  */
                    201: req_pm(argc, argv) int argc; char *argv[];
                    202: {
                    203:        register REG    **rpp,
                    204:                        *rp;
                    205:        unsigned        rnum,           /* number of registers */
                    206:                        mnum,           /* number of macros */
                    207:                        csize;          /* total space */
                    208:        int             vflag;
                    209: 
                    210:        vflag = (argv[1][0] == '\0');
                    211:        if (vflag)
                    212:                fprintf(stderr, "Macro and register sizes:\n");
                    213:        else
                    214:                fprintf(stderr, "Macro and register size: ");
                    215:        rnum = mnum = 0;
                    216:        csize = 0;
                    217:        for (rpp = &regt[0];  rpp < &regt[RHTSIZE];  rpp++) {
                    218:                for (rp = *rpp;  rp;  rp = rp->t_reg.r_next)
                    219:                        switch (rp->t_reg.r_type) {
                    220:                        case RNUMR:
                    221:                                ++rnum;
                    222:                                if (vflag)
                    223:                                        printnr(rp);
                    224:                                csize += sizeof(*rp);
                    225:                                break;
                    226:                        case RTEXT:
                    227:                                ++mnum;
                    228:                                csize += sizeof(*rp) - sizeof(rp->t_reg.r_macd);
                    229:                                csize += printm(rp, vflag);
                    230:                                break;
                    231:                        default:
                    232:                                panic("unknown macro/register type %d",
                    233:                                        rp->t_reg.r_type);
                    234:                        }
                    235:        }
                    236:        fprintf(stderr, "%u registers, %u macros, %u bytes\n",
                    237:                rnum, mnum, csize);
                    238: }
                    239: 
                    240: /*
                    241:  * Printnr prints out the size and name of a number register.
                    242:  */
                    243: printnr(rp)
                    244: register REG   *rp;
                    245: {
                    246:        fprintf(stderr, "Register %.2s %u bytes\n", rp->t_reg.r_name,
                    247:                sizeof(*rp));
                    248: }
                    249: 
                    250: /*
                    251:  * Printm returns the size of a macro and prints out its name if vflag.
                    252:  */
                    253: printm(rp, vflag)
                    254: register REG   *rp;
                    255: int            vflag;
                    256: {
                    257:        register MAC    *mp;
                    258:        unsigned        size;
                    259:        int             type;
                    260:        static char     *tn[]   = {     "Macro/String", "Diversion" };
                    261: 
                    262:        size = 0;
                    263:        mp = &rp->t_reg.r_macd;
                    264:        type = mp->t_div.m_type;
                    265:        if (type != MTEXT && type != MDIVN)
                    266:                return (size);
                    267:        fprintf(stderr, "%s %.2s", tn[type], rp->t_reg.r_name);
                    268:        for (;;) {
                    269:                size += sizeof(*mp);
                    270:                mp = mp->t_div.m_next;
                    271:                if (mp == NULL)
                    272:                        break;
                    273:                if (mp->t_div.m_type != type)
                    274:                        fprintf(stderr, " (changed to %s)",
                    275:                                tn[mp->t_div.m_type]);
                    276:        }
                    277:        if (vflag)
                    278:                fprintf(stderr, " uses %u bytes\n", size);
                    279:        return (size);
                    280: }
                    281: 
                    282: 
                    283: /*
                    284:  * Set page number.
                    285:  */
                    286: req_pn(argc, argv) int argc; char *argv[];
                    287: {
                    288:        if (argc >= 2) {
                    289:                pno = number(argv[1], SMUNIT, SDUNIT, pno, 0, pno);
                    290:                npn = pno + 1;
                    291:        }
                    292: }
                    293: 
                    294: /*
                    295:  * Set page offset.
                    296:  */
                    297: req_po(argc, argv) int argc; char *argv[];
                    298: {
                    299:        setval(&pof, &oldpof, argv[1], SMEMSP, SDEMSP);
                    300: }
                    301: 
                    302: /*
                    303:  * Set pointsize.
                    304:  */
                    305: req_ps(argc, argv) int argc; char *argv[];
                    306: {
                    307:        register int n;
                    308: 
                    309:        n = number(argv[1], SMPOIN, SDPOIN, psz, 0, oldpsz);
                    310:        newpsze(n);
                    311: }
                    312: 
                    313: /*
                    314:  * Copy a file verbatim to output.
                    315:  * !V7.
                    316:  */
                    317: req_rb(argc, argv) int argc; char *argv[];
                    318: {
                    319:        setbreak();
                    320:        if (argc < 2)
                    321:                printe(".rb: no file specified");
                    322:        else if (copy_file(argv[1]) == 0)
                    323:                printe(".rb: cannot open file %s", argv[1]);
                    324: }
                    325: 
                    326: /*
                    327:  * Read an insertion from the standard input.
                    328:  */
                    329: req_rd(argc, argv) int argc; char *argv[];
                    330: {
                    331:        if (argc >= 2)
                    332:                fprintf(stderr, "%s", argv[1]);
                    333:        else
                    334:                putc(A_BEL, stderr);
                    335:        allstr(SSINP);
                    336: }
                    337: 
                    338: /*
                    339:  * Assign a named font to another name.
                    340:  * !V7.
                    341:  */
                    342: req_rf(argc, argv) int argc; char *argv[];
                    343: {
                    344:        register int n;
                    345: 
                    346:        if (argc < 2) {
                    347:                printe(".rf: requires name and new name");
                    348:                return;
                    349:        }
                    350:        if ((n = font_number(argv[1], ".rf: ")) >= 0)
                    351:                assign_font(argv[2], n);
                    352: }
                    353: 
                    354: /*
                    355:  * Remove text register or request.
                    356:  */
                    357: req_rm(argc, argv) int argc; char *argv[];
                    358: {
                    359:        char name[2];
                    360:        register int i;
                    361: 
                    362:        for (i=1; i<argc; i++) {
                    363:                argname(argv[i], name);
                    364:                if (reltreg(name))
                    365:                        continue;
                    366:                printe("cannot remove %s", argv[i]);
                    367:        }
                    368: }
                    369: 
                    370: /*
                    371:  * Rename the given request or macro.
                    372:  * Lookup is hashed, so just changing the name field does not work.
                    373:  */
                    374: req_rn(argc, argv) int argc; char *argv[];
                    375: {
                    376:        register REG *orp, *nrp;
                    377:        char oname[2], nname[2];
                    378: 
                    379:        argname(argv[1], oname);
                    380:        if ((orp = findreg(oname, RTEXT)) == NULL) {
                    381:                printe("cannot find request %s", argv[1]);
                    382:                return;
                    383:        }
                    384:        argname(argv[2], nname);
                    385:        if ((nrp = makereg(nname, RTEXT)) == NULL) {
                    386:                printe("cannot make request %s", argv[2]);
                    387:                return;
                    388:        }
                    389:        nrp->t_reg.r_maxh = orp->t_reg.r_maxh;
                    390:        nrp->t_reg.r_maxw = orp->t_reg.r_maxw;
                    391:        nrp->t_reg.r_macd = orp->t_reg.r_macd;
                    392:        reltreg(oname);
                    393: }
                    394: 
                    395: /*
                    396:  * Restore the cursor position, just in case it got garbaged.
                    397:  * !V7.
                    398:  */
                    399: req_rp()
                    400: {
                    401:        addidir(DFPOS, 0);
                    402: }
                    403: 
                    404: /*
                    405:  * Remove number register.
                    406:  */
                    407: req_rr(argc, argv) int argc; char *argv[];
                    408: {
                    409:        char name[2];
                    410:        register int i;
                    411: 
                    412:        for (i=1; i<argc; i++) {
                    413:                argname(argv[i], name);
                    414:                if (relnreg(name))
                    415:                        continue;
                    416:                printe("cannot remove %s", argv[i]);
                    417:        }
                    418: }
                    419: 
                    420: /*
                    421:  * Turn no space mode off.
                    422:  */
                    423: req_rs()
                    424: {
                    425:        nsm = 0;
                    426: }
                    427: 
                    428: /*
                    429:  * Return to marked vertical position.
                    430:  */
                    431: req_rt(argc, argv) int argc; char *argv[];
                    432: {
                    433:        register int n;
                    434: 
                    435:        if (argc == 1)
                    436:                n = cdivp->d_mk;
                    437:        else
                    438:                n = numb(argv[1], SMVLSP, SDVLSP);
                    439:        if (n >= cdivp->d_rpos)
                    440:                return;
                    441:        sspace(n - cdivp->d_rpos);
                    442: }
                    443: 
                    444: /*
                    445:  * Stack input and redirect from given file.
                    446:  */
                    447: req_so(argc, argv) int argc; char *argv[];
                    448: {
                    449:        adsfile(argv[1]);
                    450: }
                    451: 
                    452: /*
                    453:  * Space vertically.
                    454:  */
                    455: req_sp(argc, argv) int argc; char *argv[];
                    456: {
                    457:        if (nsm != 0)
                    458:                return;
                    459:        setbreak();
                    460:        sspace(number(argv[1], SMVLSP, SDVLSP, 0, 1, unit(SMVLSP, SDVLSP)));
                    461: }
                    462: 
                    463: /*
                    464:  * Set space character size.
                    465:  */
                    466: req_ss(argc, argv) int argc; char *argv[];
                    467: {
                    468:        ssz = sszmul = number(argv[1], SMEMSP,
                    469:                                (ntroff == NROFF) ? SDEMSP : 36 * SDEMSP,
                    470:                                ssz, 0, ssz);
                    471:        sszdiv = psz;
                    472: }
                    473: 
                    474: /*
                    475:  * Save vertical distance.
                    476:  */
                    477: req_sv(argc, argv) int argc; char *argv[];
                    478: {
                    479:        register int n;
                    480: 
                    481:        n = number(argv[1], SMVLSP, SDVLSP, 0, 0, unit(SMVLSP, SDVLSP));
                    482:        if (mdivp->d_rpos+n > mdivp->d_ctpp->t_rpos)
                    483:                svs = n;
                    484:        else
                    485:                sspace(n);
                    486: }
                    487: 
                    488: /*
                    489:  * Set tab stops.
                    490:  */
                    491: req_ta(argc, argv) int argc; char *argv[];
                    492: {
                    493:        register TAB *tp;
                    494:        register int i;
                    495:        register char *p;
                    496:        int     prevpos = 0;
                    497: 
                    498:        tp = &tab[1];
                    499:        for (i=1; i<argc; i++) {
                    500:                if (i > TABSIZE-2) {
                    501:                        printe("too many tab stops");
                    502:                        break;
                    503:                }
                    504:                p = argv[i];
                    505:                if (*p == '\0') {
                    506:                        printe("bad tab stop");
                    507:                        break;
                    508:                }
                    509:                while (*p)
                    510:                        p++;
                    511:                tp->t_jus = LJUS;
                    512:                switch (*--p) {
                    513:                case 'L':
                    514:                        tp->t_jus = LJUS;
                    515:                        *p = '\0';
                    516:                        break;
                    517:                case 'C':
                    518:                        tp->t_jus = CJUS;
                    519:                        *p = '\0';
                    520:                        break;
                    521:                case 'R':
                    522:                        tp->t_jus = RJUS;
                    523:                        *p = '\0';
                    524:                        break;
                    525:                }
                    526:                tp->t_pos = number(argv[i], SMEMSP, SDEMSP, prevpos, 0, 0);
                    527:                if (tp->t_pos < prevpos) {
                    528:                        printe("bad tab stop");
                    529:                        break;
                    530:                }
                    531:                prevpos = tp->t_pos;
                    532:                tp++;
                    533:        }
                    534:        tp->t_jus = '\0';
                    535: }
                    536: 
                    537: /*
                    538:  * Set tab character.
                    539:  */
                    540: req_tc(argc, argv) int argc; char *argv[];
                    541: {
                    542:        register int n;
                    543: 
                    544:        if (argc < 1) {
                    545:                tbc = '\0';
                    546:                return;
                    547:        }
                    548:        tbc = argv[1][0];
                    549:        tfn = curfont;
                    550:        if (argc > 2)
                    551:                tbs = number(argv[2], SMEMSP, SDEMSP, tbs, 0, tbs);
                    552:        if (argc > 3 && (n = font_number(argv[3], ".tc: ")) >= 0)
                    553:                tfn = n;
                    554: }
                    555: 
                    556: /*
                    557:  * Temporary indent.
                    558:  */
                    559: req_ti(argc, argv) int argc; char *argv[];
                    560: {
                    561:        setbreak();
                    562:        tin = number(argv[1], SMEMSP, SDEMSP, ind, 0, 0);
                    563:        tif = 1;
                    564: }
                    565: 
                    566: /*
                    567:  * Three part title.
                    568:  */
                    569: req_tl(argc, argv) int argc; char *argv[];
                    570: {
                    571:        CODE *cp;
                    572:        int i;
                    573:        register int n;
                    574:        char charbuf[CBFSIZE], endc, c;
                    575:        register char *bp, *lp;
                    576: 
                    577:        envsave(ENVTITLE);
                    578:        setline();
                    579:        ind = 0;
                    580:        lln = tln;
                    581:        fill = 0;
                    582:        setfont("R", 1);
                    583:        bp = nextarg(miscbuf, NULL, 0);
                    584:        if ((endc = *bp) != '\0')
                    585:                bp++;
                    586:        for (i=0; i<3; i++) {
                    587:                lp = charbuf;
                    588:                for (;;) {
                    589:                        if (*bp == '\0')
                    590:                                break;
                    591:                        if ((c = *bp++) == endc)
                    592:                                break;
                    593:                        if (c == tpc) {
                    594:                                char    digits[5];
                    595:                                register char   *dp = &digits[0];
                    596:                                register int    pn = pno;
                    597: 
                    598:                                for(;  pn > 0;  pn /= 10)
                    599:                                        *dp++ = pn%10 + '0';
                    600:                                while (--dp > &digits[0])
                    601:                                        *lp++ = *dp;
                    602:                                c = *dp;
                    603:                        }
                    604:                        if (lp >= &charbuf[CBFSIZE-2]) {
                    605:                                printe("section %d of title too large", i+1);
                    606:                                break;
                    607:                        }
                    608:                        *lp++ = c;
                    609:                }
                    610:                if (lp != charbuf) {
                    611:                        *lp = '\0';
                    612:                        adscore(charbuf);
                    613:                        strp->x1.s_eoff = 1;
                    614:                        process();
                    615:                        wordbreak(DHMOV);
                    616:                }
                    617:                switch (i) {
                    618:                case 0:
                    619:                        n = llinsiz;
                    620:                        cp = llinptr;
                    621:                        break;
                    622:                case 1:
                    623:                        n = (lln - llinsiz - n)/2;
                    624:                        nlinsiz = llinsiz += cp->l_arg.c_iarg = n;
                    625:                        cp = llinptr;
                    626:                        break;
                    627:                case 2:
                    628:                        n = lln - llinsiz;
                    629:                        cp->l_arg.c_iarg += n;
                    630:                        llinsiz += n;
                    631:                        break;
                    632:                }
                    633:        }
                    634:        linebreak(1);
                    635:        envload(ENVTITLE);
                    636: }
                    637: 
                    638: /*
                    639:  * Print a message on the terminal.
                    640:  */
                    641: req_tm(argc, argv) int argc; char *argv[];
                    642: {
                    643:        fprintf(stderr, "%s\n", nextarg(miscbuf, NULL, 0));
                    644: }
                    645: 
                    646: /*
                    647:  * Translate on output.
                    648:  */
                    649: req_tr(argc, argv) int argc; char *argv[];
                    650: {
                    651:        register char c1, c2, *p;
                    652: 
                    653:        p = argv[1];
                    654:        while (c1 = *p++) {
                    655:                if ((c2 = *p++) == '\0') {
                    656:                        --p;
                    657:                        c2 = ' ';
                    658:                }
                    659:                if (!isascii(c1) || !isascii(c2))       /* Remove this! */
                    660:                        continue;                       /* $$TO_DO$$ */
                    661:                if (c2 == ' ')
                    662:                        c2 = A_DEL;                     /* Or some other value? */
                    663:                trantab[c1] = c2;
                    664:        }
                    665: }
                    666: 
                    667: /*
                    668:  * Set underline font.
                    669:  */
                    670: req_uf(argc, argv) int argc; char *argv[];
                    671: {
                    672:        register int n;
                    673:        char *name;
                    674: 
                    675:        name = (argc < 1) ? "I" : argv[1];
                    676:        if ((n = font_number(name, ".uf: ")) >= 0)
                    677:                ufn = n;
                    678: }
                    679: 
                    680: /*
                    681:  * Underline.
                    682:  */
                    683: req_ul(argc, argv) int argc; char *argv[];
                    684: {
                    685:        register int n;
                    686: 
                    687:        n = number(argv[1], SMUNIT, SDUNIT, 0, 0, 1);
                    688:        if (n != 0) {
                    689:                ufp = curfont;          /* save current font */
                    690:                setfontnum(ufn, 0);     /* set underline font */
                    691:        } else if (ulc != 0)
                    692:                setfontnum(ufp, 1);     /* restore previous font */
                    693:        ulc = n;                        /* set underline count */
                    694: }
                    695: 
                    696: /*
                    697:  * Set vertical base line spacing.
                    698:  */
                    699: req_vs(argc, argv) int argc; char *argv[];
                    700: {
                    701:        setval(&vls, &oldvls, argv[1], SMPOIN, SDPOIN);
                    702: }
                    703: 
                    704: /*
                    705:  * Set a trap.
                    706:  */
                    707: req_wh(argc, argv) int argc; char *argv[];
                    708: {
                    709:        register TPL    **tpp, *tp;
                    710:        TPL             *in;
                    711:        register DIV *dp;
                    712:        int rpos, apos;
                    713: 
                    714:        rpos = numb(argv[1], SMVLSP, SDVLSP);
                    715:        apos = rpos>=0 ? rpos : pgl+rpos;
                    716:        dp = mdivp;
                    717:        for (tpp = &dp->d_stpl; tp = *tpp; tpp = &tp->t_next) {
                    718:                if (apos == tp->t_apos) {
                    719:                        if (dp->d_trap == tp)
                    720:                                dp->d_trap = tp->t_next;
                    721:                        if (dp->d_ctpp == tp)
                    722:                                dp->d_ctpp = tp->t_next;
                    723:                        *tpp = tp->t_next;
                    724:                        nfree(tp);
                    725:                        if (argc < 3)   /* .wh NN xx !replaces all at NN */
                    726:                                break;  /* .wh NN !only removes 1st */
                    727:                 } else if (apos < tp->t_apos)
                    728:                        break;
                    729:        }
                    730:        if (argc >= 3) {
                    731:                tp = (TPL *)nalloc(sizeof (TPL));
                    732:                tp->t_rpos = rpos;
                    733:                tp->t_apos = apos;
                    734:                argname(argv[2], tp->t_name);
                    735: 
                    736:                if ((dp->d_stpl == NULL) || (dp->d_stpl->t_apos > apos)) {
                    737:                        tp->t_next = dp->d_stpl;
                    738:                        dp->d_stpl = tp;
                    739:                }
                    740:                else { in = dp->d_stpl;
                    741:                        while (in->t_next)
                    742:                                if (in->t_next->t_apos > apos)
                    743:                                        break;
                    744:                                else
                    745:                                        in = in->t_next;
                    746:                        tp->t_next = in->t_next;
                    747:                        in->t_next = tp;
                    748:                }
                    749: 
                    750:                if (dp->d_trap==tp->t_next && apos>=0)
                    751:                        dp->d_trap = tp;
                    752:                if (dp->d_ctpp==tp->t_next && apos>=dp->d_rpos)
                    753:                        dp->d_ctpp = tp;
                    754:        }
                    755: }
                    756: 
                    757: /* end of req2.c */

unix.superglobalmegacorp.com

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