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

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

unix.superglobalmegacorp.com

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