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