Annotation of researchv10no/cmd/troff/n7.c, revision 1.1

1.1     ! root        1: #include "tdef.h"
        !             2: #include "fns.h"
        !             3: #include "ext.h"
        !             4: 
        !             5: #define GETCH gettch
        !             6: Tchar  gettch(void);
        !             7: 
        !             8: 
        !             9: /*
        !            10:  * troff7.c
        !            11:  * 
        !            12:  * text
        !            13:  */
        !            14: 
        !            15: int    brflg;
        !            16: 
        !            17: void tbreak(void)
        !            18: {
        !            19:        int pad, k;
        !            20:        Tchar *i, j;
        !            21:        int resol;
        !            22:        int un0 = un;
        !            23: 
        !            24:        trap = 0;
        !            25:        if (nb)
        !            26:                return;
        !            27:        if (dip == d && numtab[NL].val == -1) {
        !            28:                newline(1);
        !            29:                return;
        !            30:        }
        !            31:        if (!nc) {
        !            32:                setnel();
        !            33:                if (!wch)
        !            34:                        return;
        !            35:                if (pendw)
        !            36:                        getword(1);
        !            37:                movword();
        !            38:        } else if (pendw && !brflg) {
        !            39:                getword(1);
        !            40:                movword();
        !            41:        }
        !            42:        *linep = dip->nls = 0;
        !            43:        if (NROFF && dip == d)
        !            44:                horiz(po);
        !            45:        if (lnmod)
        !            46:                donum();
        !            47:        lastl = ne;
        !            48:        if (brflg != 1) {
        !            49:                totout = 0;
        !            50:        } else if (ad) {
        !            51:                if ((lastl = ll - un) < ne)
        !            52:                        lastl = ne;
        !            53:        }
        !            54:        if (admod && ad && (brflg != 2)) {
        !            55:                lastl = ne;
        !            56:                adsp = adrem = 0;
        !            57:                if (admod == 1)
        !            58:                        un +=  quant(nel / 2, HOR);
        !            59:                else if (admod == 2)
        !            60:                        un += nel;
        !            61:        }
        !            62:        totout++;
        !            63:        brflg = 0;
        !            64:        if (lastl + un > dip->maxl)
        !            65:                dip->maxl = lastl + un;
        !            66:        horiz(un);
        !            67:        if (NROFF) {
        !            68:                if (adrem % t.Adj)
        !            69:                        resol = t.Hor; 
        !            70:                else 
        !            71:                        resol = t.Adj;
        !            72:        } else
        !            73:                resol = HOR;
        !            74: 
        !            75:        lastl = ne + (nwd-1) * adsp + adrem;
        !            76:        for (i = line; nc > 0; ) {
        !            77:                if ((cbits(j = *i++)) == ' ') {
        !            78:                        pad = 0;
        !            79:                        do {
        !            80:                                pad += width(j);
        !            81:                                nc--;
        !            82:                        } while ((cbits(j = *i++)) == ' ');
        !            83:                        i--;
        !            84:                        pad += adsp;
        !            85:                        --nwd;
        !            86:                        if (adrem) {
        !            87:                                if (adrem < 0) {
        !            88:                                        pad -= resol;
        !            89:                                        adrem += resol;
        !            90:                                } else if ((totout & 01) || adrem / resol >= nwd) {
        !            91:                                        pad += resol;
        !            92:                                        adrem -= resol;
        !            93:                                }
        !            94:                        }
        !            95:                        pchar((Tchar) WORDSP);
        !            96:                        horiz(pad);
        !            97:                } else {
        !            98:                        pchar(j);
        !            99:                        nc--;
        !           100:                }
        !           101:        }
        !           102:        if (ic) {
        !           103:                if ((k = ll - un0 - lastl + ics) > 0)
        !           104:                        horiz(k);
        !           105:                pchar(ic);
        !           106:        }
        !           107:        if (icf)
        !           108:                icf++;
        !           109:        else 
        !           110:                ic = 0;
        !           111:        ne = nwd = 0;
        !           112:        un = in;
        !           113:        setnel();
        !           114:        newline(0);
        !           115:        if (dip != d) {
        !           116:                if (dip->dnl > dip->hnl)
        !           117:                        dip->hnl = dip->dnl;
        !           118:        } else {
        !           119:                if (numtab[NL].val > dip->hnl)
        !           120:                        dip->hnl = numtab[NL].val;
        !           121:        }
        !           122:        for (k = ls - 1; k > 0 && !trap; k--)
        !           123:                newline(0);
        !           124:        spread = 0;
        !           125: }
        !           126: 
        !           127: void donum(void)
        !           128: {
        !           129:        int i, nw;
        !           130:        int lnv = numtab[LN].val;
        !           131: 
        !           132:        nrbits = nmbits;
        !           133:        nw = width('1' | nrbits);
        !           134:        if (nn) {
        !           135:                nn--;
        !           136:                goto d1;
        !           137:        }
        !           138:        if (lnv % ndf) {
        !           139:                numtab[LN].val++;
        !           140: d1:
        !           141:                un += nw * (nmwid + nms + ni);
        !           142:                return;
        !           143:        }
        !           144:        i = 0;
        !           145:        do {            /* count digits in numtab[LN].val */
        !           146:                i++;
        !           147:        } while ((lnv /= 10) > 0);
        !           148:        horiz(nw * (ni + max(nmwid-i, 0)));
        !           149:        nform = 0;
        !           150:        fnumb(numtab[LN].val, pchar);
        !           151:        un += nw * nms;
        !           152:        numtab[LN].val++;
        !           153: }
        !           154: 
        !           155: 
        !           156: void text(void)
        !           157: {
        !           158:        Tchar i;
        !           159:        static int spcnt;
        !           160: 
        !           161:        nflush++;
        !           162:        numtab[HP].val = 0;
        !           163:        if ((dip == d) && (numtab[NL].val == -1)) {
        !           164:                newline(1)        !           165:                return;
        !           166:        }
        !           167:        setnel();
        !           168:        if (ce || !fi) {
        !           169:                nofill();
        !           170:                return;
        !           171:        }
        !           172:        if (pendw)
        !           173:                goto t4;
        !           174:        if (pendt)
        !           175:                if (spcnt)
        !           176:                        goto t2; 
        !           177:                else 
        !           178:                        goto t3;
        !           179:        pendt++;
        !           180:        if (spcnt)
        !           181:                goto t2;
        !           182:        while ((cbits(i = GETCH())) == ' ') {
        !           183:                spcnt++;
        !           184:                numtab[HP].val += sps;
        !           185:                widthp = sps;
        !           186:        }
        !           187:        if (nlflg) {
        !           188: t1:
        !           189:                nflush = pendt = ch = spcnt = 0;
        !           190:                callsp();
        !           191:                return;
        !           192:        }
        !           193:        ch = i;
        !           194:        if (spcnt) {
        !           195: t2:
        !           196:                tbreak();
        !           197:                if (nc || wch)
        !           198:                        goto rtn;
        !           199:                un += spcnt * sps;
        !           200:                spcnt = 0;
        !           201:                setnel();
        !           202:                if (trap)
        !           203:                        goto rtn;
        !           204:                if (nlflg)
        !           205:                        goto t1;
        !           206:        }
        !           207: t3:
        !           208:        if (spread)
        !           209:                goto t5;
        !           210:        if (pendw || !wch)
        !           211: t4:
        !           212:                if (getword(0))
        !           213:                        goto t6;
        !           214:        if (!movword())
        !           215:                goto t3;
        !           216: t5:
        !           217:        if (nlflg)
        !           218:                pendt = 0;
        !           219:        adsp = adrem = 0;
        !           220:        if (ad) {
        !           221:                if (nwd == 1)
        !           222:                        adsp = nel; 
        !           223:                else 
        !           224:                        adsp = nel / (nwd - 1);
        !           225:                adsp = (adsp / HOR) * HOR;
        !           226:                adrem = nel - adsp*(nwd-1);
        !           227:        }
        !           228:        brflg = 1;
        !           229:        tbreak();
        !           230:        spread = 0;
        !           231:        if (!trap)
        !           232:                goto t3;
        !           233:        if (!nlflg)
        !           234:                goto rtn;
        !           235: t6:
        !           236:        pendt = 0;
        !           237:        ckul();
        !           238: rtn:
        !           239:        nflush = 0;
        !           240: }
        !           241: 
        !           242: 
        !           243: void nofill(void)
        !           244: {
        !           245:        int j;
        !           246:        Tchar i;
        !           247: 
        !           248:        if (!pendnf) {
        !           249:                over = 0;
        !           250:                tbreak();
        !           251:                if (trap)
        !           252:                        goto rtn;
        !           253:                if (nlflg) {
        !           254:                        ch = nflush = 0;
        !           255:                        callsp();
        !           256:                        return;
        !           257:                }
        !           258:                adsp = adrem = 0;
        !           259:                nwd = 10000;
        !           260:        }
        !           261:        while ((j = (cbits(i = GETCH()))) != '\n') {
        !           262:                if (j == ohc)
        !           263:                        continue;
        !           264:                if (j == CONT) {
        !           265:                        pendnf++;
        !           266:                        nflush = 0;
        !           267:                        flushi();
        !           268:                        ckul();
        !           269:                        return;
        !           270:                }
        !           271:                j = width(i);
        !           272:                widthp = j;
        !           273:                numtab[HP].val += j;
        !           274:                storeline(i, j);
        !           275:        }
        !           276:        if (ce) {
        !           277:                ce--;
        !           278:                if ((i = quant(nel / 2, HOR)) > 0)
        !           279:                        un += i;
        !           280:        }
        !           281:        if (!nc)
        !           282:                storeline((Tchar)FILLER, 0);
        !           283:        brflg = 2;
        !           284:        tbreak();
        !           285:        ckul();
        !           286: rtn:
        !           287:        pendnf = nflush = 0;
        !           288: }
        !           289: 
        !           290: 
        !           291: void callsp(void)
        !           292: {
        !           293:        int i;
        !           294: 
        !           295:        if (flss)
        !           296:                i = flss; 
        !           297:        else 
        !           298:                i = lss;
        !           299:        flss = 0;
        !           300:        casesp1(i);
        !           301: }
        !           302: 
        !           303: 
        !           304: void ckul(void)
        !           305: {
        !           306:        if (ul && (--ul == 0)) {
        !           307:                cu = 0;
        !           308:                font = sfont;
        !           309:                mchbits();
        !           310:        }
        !           311:        if (it && --it == 0 && itmac)
        !           312:                control(itmac, 0);
        !           313: }
        !           314: 
        !           315: 
        !           316: void storeline(Tchar c, int w)
        !           317: {
        !           318:        if (linep >= line + lnsize - 2) {
        !           319:                if (!over) {
        !           320:                        flusho();
        !           321:                        ERROR "Line overflow." WARN;
        !           322:                        over++;
        !           323:                        c = LEFTHAND;
        !           324:                        w = -1;
        !           325:                        *linep++ = c;
        !           326:                        *linep++ = '\n'; nc++;  /* other one comes later */
        !           327:                        goto s1;
        !           328:                }
        !           329:                return;
        !           330:        }
        !           331:        *linep++ = c;
        !           332: s1:
        !           333:        if (w == -1)
        !           334:                w = width(c);
        !           335:        ne += w;
        !           336:        nel -= w;
        !           337:        nc++;
        !           338: }
        !           339: 
        !           340: 
        !           341: void newline(int a)
        !           342: {
        !           343:        int i, j, nlss;
        !           344:        int opn;
        !           345: 
        !           346:        if (a)
        !           347:                goto nl1;
        !           348:        if (dip != d) {
        !           349:                j = lss;
        !           350:                pchar1((Tchar)FLSS);
        !           351:                if (flss)
        !           352:                        lss = flss;
        !           353:                i = lss + dip->blss;
        !           354:                dip->dnl += i;
        !           355:                pchar1((Tchar)i);
        !           356:                pchar1((Tchar)'\n');
        !           357:                lss = j;
        !           358:                dip->blss = flss = 0;
        !           359:                if (dip->alss) {
        !           360:                        pchar1((Tchar)FLSS);
        !           361:                        pchar1((Tchar)dip->alss);
        !           362:                        pchar1((Tchar)'\n');
        !           363:                        dip->dnl += dip->alss;
        !           364:                        dip->alss = 0;
        !           365:                }
        !           366:                if (dip->ditrap && !dip->ditf && dip->dnl >= dip->ditrap && dip->dimac)
        !           367:                        if (control(dip->dimac, 0)) {
        !           368:                                trap++; 
        !           369:                                dip->ditf++;
        !           370:                        }
        !           371:                return;
        !           372:        }
        !           373:        j = lss;
        !           374:        if (flss)
        !           375:                lss = flss;
        !           376:        nlss = dip->alss + dip->blss + lss;
        !           377:        numtab[NL].val += nlss;
        !           378:        if (TROFF && ascii) {
        !           379:                dip->alss = dip->blss = 0;
        !           380:        }
        !           381:        pchar1((Tchar)'\n');
        !           382:        flss = 0;
        !           383:        lss = j;
        !           384:        if (numtab[NL].val < pl)
        !           385:                goto nl2;
        !           386: nl1:
        !           387:        ejf = dip->hnl = numtab[NL].val = 0;
        !           388:        ejl = frame;
        !           389:        if (donef) {
        !           390:                if ((!nc && !wch) || ndone)
        !           391:                        done1(0);
        !           392:                ndone++;
        !           393:                donef = 0;
        !           394:                if (frame == stk)
        !           395:                        nflush++;
        !           396:        }
        !           397:        opn = numtab[PN].val;
        !           398:        numtab[PN].val++;
        !           399:        if (npnflg) {
        !           400:                numtab[PN].val = npn;
        !           401:                npn = npnflg = 0;
        !           402:        }
        !           403: nlpn:
        !           404:        if (numtab[PN].val == pfrom) {
        !           405:                print++;
        !           406:                pfrom = -1;
        !           407:        } else if (opn == pto) {
        !           408:                print = 0;
        !           409:                opn = -1;
        !           410:                chkpn();
        !           411:                goto nlpn;
        !           412:        }
        !           413:        if (print)
        !           414:                ptpage(numtab[PN].val); /* supposedly in a clean state so can pause */
        !           415:        if (stop && print) {
        !           416:                dpn++;
        !           417:                if (dpn >= stop) {
        !           418:                        dpn = 0;
        !           419:                        ptpause();
        !           420:                }
        !           421:        }
        !           422: nl2:
        !           423:        trap = 0;
        !           424:        if (numtab[NL].val == 0) {
        !           425:                if ((j = findn(0)) != NTRAP)
        !           426:                        trap = control(mlist[j], 0);
        !           427:        } else if ((i = findt(numtab[NL].val - nlss)) <= nlss) {
        !           428:                if ((j = findn1(numtab[NL].val - nlss + i)) == NTRAP) {
        !           429:                        flusho();
        !           430:                        ERROR "Trap botch." WARN;
        !           431:                        done2(-5);
        !           432:                }
        !           433:                trap = control(mlist[j], 0);
        !           434:        }
        !           435: }
        !           436: 
        !           437: 
        !           438: findn1(int a)
        !           439: {
        !           440:        int i, j;
        !           441: 
        !           442:        for (i = 0; i < NTRAP; i++) {
        !           443:                if (mlist[i]) {
        !           444:                        if ((j = nlist[i]) < 0)
        !           445:                                j += pl;
        !           446:                        if (j == a)
        !           447:                                break;
        !           448:                }
        !           449:        }
        !           450:        return(i);
        !           451: }
        !           452: 
        !           453: 
        !           454: void chkpn(void)
        !           455: {
        !           456:        pto = *(pnp++);
        !           457:        pfrom = pto>=0 ? pto : -pto;
        !           458:        if (pto == -INT_MAX) {
        !           459:                flusho();
        !           460:                done1(0);
        !           461:        }
        !           462:        if (pto < 0) {
        !           463:                pto = -pto;
        !           464:                print++;
        !           465:                pfrom = 0;
        !           466:        }
        !           467: }
        !           468: 
        !           469: 
        !           470: findt(int a)
        !           471: {
        !           472:        int i, j, k;
        !           473: 
        !           474:        k = INT_MAX;
        !           475:        if (dip != d) {
        !           476:                if (dip->dimac && (i = dip->ditrap - a) > 0)
        !           477:                        k = i;
        !           478:                return(k);
        !           479:        }
        !           480:        for (i = 0; i < NTRAP; i++) {
        !           481:                if (mlist[i]) {
        !           482:                        if ((j = nlist[i]) < 0)
        !           483:                                j += pl;
        !           484:                        if ((j -= a) <= 0)
        !           485:                                continue;
        !           486:                        if (j < k)
        !           487:                                k = j;
        !           488:                }
        !           489:        }
        !           490:        i = pl - a;
        !           491:        if (k > i)
        !           492:                k = i;
        !           493:        return(k);
        !           494: }
        !           495: 
        !           496: 
        !           497: findt1(void)
        !           498: {
        !           499:        int i;
        !           500: 
        !           501:        if (dip != d)
        !           502:                i = dip->dnl;
        !           503:        else 
        !           504:                i = numtab[NL].val;
        !           505:        return(findt(i));
        !           506: }
        !           507: 
        !           508: 
        !           509: void eject(Stack *a)
        !           510: {
        !           511:        int savlss;
        !           512: 
        !           513:        if (dip != d)
        !           514:                return;
        !           515:        ejf++;
        !           516:        if (a)
        !           517:                ejl = a;
        !           518:        else 
        !           519:                ejl = frame;
        !           520:        if (trap)
        !           521:                return;
        !           522: e1:
        !           523:        savlss = lss;
        !           524:        lss = findt(numtab[NL].val);
        !           525:        newline(0);
        !           526:        lss = savlss;
        !           527:        if (numtab[NL].val && !trap)
        !           528:                goto e1;
        !           529: }
        !           530: 
        !           531: 
        !           532: movword(void)
        !           533: {
        !           534:        int w;
        !           535:        Tchar i, *wp;
        !           536:        int savwch, hys;
        !           537: 
        !           538:        over = 0;
        !           539:        wp = wordp;
        !           540:        if (!nwd) {
        !           541:                while (cbits(*wp++) == ' ') {
        !           542:                        wch--;
        !           543:                        wne -= sps;
        !           544:                }
        !           545:                wp--;
        !           546:        }
        !           547:        if (wne > nel && !hyoff && hyf && (!nwd || nel > 3 * sps) &&
        !           548:           (!(hyf & 02) || (findt1() > lss)))
        !           549:                hyphen(wp);
        !           550:        savwch = wch;
        !           551:        hyp = hyptr;
        !           552:        nhyp = 0;
        !           553:        while (*hyp && *hyp <= wp)
        !           554:                hyp++;
        !           555:        while (wch) {
        !           556:                if (hyoff != 1 && *hyp == wp) {
        !           557:                        hyp++;
        !           558:                        if (!wdstart || (wp > wdstart + 1 && wp < wdend &&
        !           559:                           (!(hyf & 04) || wp < wdend - 1) &&           /* 04 => last 2 */
        !           560:                           (!(hyf & 010) || wp > wdstart + 2))) {       /* 010 => 1st 2 */
        !           561:                                nhyp++;
        !           562:                                storeline((Tchar)IMP, 0);
        !           563:                        }
        !           564:                }
        !           565:                i = *wp++;
        !           566:                w = width(i);
        !           567:                wne -= w;
        !           568:                wch--;
        !           569:                storeline(i, w);
        !           570:        }
        !           571:        if (nel >= 0) {
        !           572:                nwd++;
        !           573:                return(0);      /* line didn't fill up */
        !           574:        }
        !           575:        if (TROFF)
        !           576:                xbits((Tchar)HYPHEN, 1);
        !           577:        hys = width((Tchar)HYPHEN);
        !           578: m1:
        !           579:        if (!nhyp) {
        !           580:                if (!nwd)
        !           581:                        goto m3;
        !           582:                if (wch == savwch)
        !           583:                        goto m4;
        !           584:        }
        !           585:        if (*--linep != IMP)
        !           586:                goto m5;
        !           587:        if (!(--nhyp))
        !           588:                if (!nwd)
        !           589:                        goto m2;
        !           590:        if (nel < hys) {
        !           591:                nc--;
        !           592:                goto m1;
        !           593:        }
        !           594: m2:
        !           595:        if ((i = cbits(*(linep - 1))) != '-' && i != EMDASH) {
        !           596:                *linep = (*(linep - 1) & SFMASK) | HYPHEN;
        !           597:                w = width(*linep);
        !           598:                nel -= w;
        !           599:                ne += w;
        !           600:                linep++;
        !           601:        }
        !           602: m3:
        !           603:        nwd++;
        !           604: m4:
        !           605:        wordp = wp;
        !           606:        return(1);      /* line filled up */
        !           607: m5:
        !           608:        nc--;
        !           609:        w = width(*linep);
        !           610:        ne -= w;
        !           611:        nel += w;
        !           612:        wne += w;
        !           613:        wch++;
        !           614:        wp--;
        !           615:        goto m1;
        !           616: }
        !           617: 
        !           618: 
        !           619: void horiz(int i)
        !           620: {
        !           621:        vflag = 0;
        !           622:        if (i)
        !           623:                pchar(makem(i));
        !           624: }
        !           625: 
        !           626: 
        !           627: void setnel(void)
        !           628: {
        !           629:        if (!nc) {
        !           630:                linep = line;
        !           631:                if (un1 >= 0) {
        !           632:                        un = un1;
        !           633:                        un1 = -1;
        !           634:                }
        !           635:                nel = ll - un;
        !           636:                ne = adsp = adrem = 0;
        !           637:        }
        !           638: }
        !           639: 
        !           640: 
        !           641: getword(int x)
        !           642: {
        !           643:        int j, k;
        !           644:        Tchar i, *wp;
        !           645:        int noword;
        !           646:        int obits;
        !           647: 
        !           648:        noword = 0;
        !           649:        if (x)
        !           650:                if (pendw) {
        !           651:                        *pendw = 0;
        !           652:                        goto rtn;
        !           653:                }
        !           654:        if (wordp = pendw)
        !           655:                goto g1;
        !           656:        hyp = hyptr;
        !           657:        wordp = word;
        !           658:        over = wne = wch = 0;
        !           659:        hyoff = 0;
        !           660:        obits = chbits;
        !           661:        while (1) {     /* picks up 1st char of word */
        !           662:                j = cbits(i = GETCH());
        !           663:                if (j == '\n') {
        !           664:                        wne = wch = 0;
        !           665:                        noword = 1;
        !           666:                        goto rtn;
        !           667:                }
        !           668:                if (j == ohc) {
        !           669:                        hyoff = 1;      /* 1 => don't hyphenate */
        !           670:                        continue;
        !           671:                }
        !           672:                if (j == ' ') {
        !           673:                        numtab[HP].val += sps;
        !           674:                        widthp = sps;
        !           675:                        storeword(i, sps);
        !           676:                        continue;
        !           677:                }
        !           678:                break;
        !           679:        }
        !           680:        storeword(' ' | obits, sps);
        !           681:        if (spflg) {
        !           682:                storeword(' ' | obits, sps);
        !           683:                spflg = 0;
        !           684:        }
        !           685: g0:
        !           686:        if (j == CONT) {
        !           687:                pendw = wordp;
        !           688:                nflush = 0;
        !           689:                flushi();
        !           690:                return(1);
        !           691:        }
        !           692:        if (hyoff != 1) {
        !           693:                if (j == ohc) {
        !           694:                        hyoff = 2;
        !           695:                        *hyp++ = wordp;
        !           696:                        if (hyp > hyptr + NHYP - 1)
        !           697:                                hyp = hyptr + NHYP - 1;
        !           698:                        goto g1;
        !           699:                }
        !           700:                if (((j == '-' || j == EMDASH)) && !(i & ZBIT)) /* zbit avoids \X */
        !           701:                        if (wordp > word + 1) {
        !           702:                                hyoff = 2;
        !           703:                                *hyp++ = wordp + 1;
        !           704:                                if (hyp > hyptr + NHYP - 1)
        !           705:                                        hyp = hyptr + NHYP - 1;
        !           706:                        }
        !           707:        }
        !           708:        j = width(i);
        !           709:        numtab[HP].val += j;
        !           710:        storeword(i, j);
        !           711: g1:
        !           712:        j = cbits(i = GETCH());
        !           713:        if (j != ' ') {
        !           714:                static char *sentchar = ".?!";  /* sentence terminators */
        !           715:                if (j != '\n')
        !           716:                        goto g0;
        !           717:                wp = wordp-1;   /* handle extra space at end of sentence */
        !           718:                while (wp >= word) {
        !           719:                        j = cbits(*wp--);
        !           720:                        if (j=='"' || j=='\'' || j==')' || j==']' || j=='*' || j==DAGGER)
        !           721:                                continue;
        !           722:                        for (k = 0; sentchar[k]; k++)
        !           723:                                if (j == sentchar[k]) {
        !           724:                                        spflg++;
        !           725:                                        break;
        !           726:                                }
        !           727:                        break;
        !           728:                }
        !           729:        }
        !           730:        *wordp = 0;
        !           731:        numtab[HP].val += sps;
        !           732: rtn:
        !           733:        for (wp = word; *wp; wp++) {
        !           734:                if (ismot(j))
        !           735:                        break;  /* drechsler */
        !           736:                j = cbits(*wp);
        !           737:                if (j == ' ')
        !           738:                        continue;
        !           739:                if (!isdigit(j) && j != '-')
        !           740:                        break;
        !           741:        }
        !           742:        if (*wp == 0)   /* all numbers, so don't hyphenate */
        !           743:                hyoff = 1;
        !           744:        wdstart = 0;
        !           745:        wordp = word;
        !           746:        pendw = 0;
        !           747:        *hyp++ = 0;
        !           748:        setnel();
        !           749:        return(noword);
        !           750: }
        !           751: 
        !           752: 
        !           753: void storeword(Tchar c, int w)
        !           754: {
        !           755:        if (wordp >= &word[WDSIZE - 3]) {
        !           756:                if (!over) {
        !           757:                        flusho();
        !           758:                        ERROR "Word overflow." WARN;
        !           759:                        over++;
        !           760:                        c = LEFTHAND;
        !           761:                        w = -1;
        !           762:                        goto s1;
        !           763:                }
        !           764:                return;
        !           765:        }
        !           766: s1:
        !           767:        if (w == -1)
        !           768:                w = width(c);
        !           769:        widthp = w;
        !           770:        wne += w;
        !           771:        *wordp++ = c;
        !           772:        wch++;
        !           773: }
        !           774: 
        !           775: 
        !           776: Tchar gettch(void)
        !           777: {
        !           778:        extern int c_isalnum;
        !           779:        Tchar i;
        !           780:        int j;
        !           781: 
        !           782:        if (TROFF)
        !           783:                return getch();
        !           784: 
        !           785:        i = getch();
        !           786:        j = cbits(i);
        !           787:        if (ismot(i) || fbits(i) != ulfont)
        !           788:                return(i);
        !           789:        if (cu) {
        !           790:                if (trtab[j] == ' ') {
        !           791:                        setcbits(i, '_');
        !           792:                        setfbits(i, FT);        /* default */
        !           793:                }
        !           794:                return(i);
        !           795:        }
        !           796:        /* should test here for characters that ought to be underlined */
        !           797:        /* in the old nroff, that was the 200 bit on the width! */
        !           798:        /* for now, just do letters, digits and certain special chars */
        !           799:        if (j <= 127) {
        !           800:                if (!isalnum(j))
        !           801:                        setfbits(i, FT);
        !           802:        } else {
        !           803:                if (j < c_isalnum)
        !           804:                        setfbits(i, FT);
        !           805:        }
        !           806:        return(i);
        !           807: }

unix.superglobalmegacorp.com

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