13e12c5d1SDavid du Colombier #include "tdef.h"
23e12c5d1SDavid du Colombier #include "fns.h"
33e12c5d1SDavid du Colombier #include "ext.h"
43e12c5d1SDavid du Colombier
5219b2ee8SDavid du Colombier #ifdef STRICT
6219b2ee8SDavid du Colombier /* not in ANSI or POSIX */
7*14f51593SDavid du Colombier #undef isascii
8219b2ee8SDavid du Colombier #define isascii(a) ((a) >= 0 && (a) <= 127)
9219b2ee8SDavid du Colombier #endif
10219b2ee8SDavid du Colombier
113e12c5d1SDavid du Colombier #define GETCH gettch
123e12c5d1SDavid du Colombier Tchar gettch(void);
133e12c5d1SDavid du Colombier
143e12c5d1SDavid du Colombier
153e12c5d1SDavid du Colombier /*
163e12c5d1SDavid du Colombier * troff7.c
173e12c5d1SDavid du Colombier *
183e12c5d1SDavid du Colombier * text
193e12c5d1SDavid du Colombier */
203e12c5d1SDavid du Colombier
213e12c5d1SDavid du Colombier int brflg;
223e12c5d1SDavid du Colombier
tbreak(void)233e12c5d1SDavid du Colombier void tbreak(void)
243e12c5d1SDavid du Colombier {
253e12c5d1SDavid du Colombier int pad, k;
263e12c5d1SDavid du Colombier Tchar *i, j;
273e12c5d1SDavid du Colombier int resol;
283e12c5d1SDavid du Colombier int un0 = un;
293e12c5d1SDavid du Colombier
303e12c5d1SDavid du Colombier trap = 0;
313e12c5d1SDavid du Colombier if (nb)
323e12c5d1SDavid du Colombier return;
33219b2ee8SDavid du Colombier if (dip == d && numtabp[NL].val == -1) {
343e12c5d1SDavid du Colombier newline(1);
353e12c5d1SDavid du Colombier return;
363e12c5d1SDavid du Colombier }
373e12c5d1SDavid du Colombier if (!nc) {
383e12c5d1SDavid du Colombier setnel();
393e12c5d1SDavid du Colombier if (!wch)
403e12c5d1SDavid du Colombier return;
413e12c5d1SDavid du Colombier if (pendw)
423e12c5d1SDavid du Colombier getword(1);
433e12c5d1SDavid du Colombier movword();
443e12c5d1SDavid du Colombier } else if (pendw && !brflg) {
453e12c5d1SDavid du Colombier getword(1);
463e12c5d1SDavid du Colombier movword();
473e12c5d1SDavid du Colombier }
483e12c5d1SDavid du Colombier *linep = dip->nls = 0;
493e12c5d1SDavid du Colombier if (NROFF && dip == d)
503e12c5d1SDavid du Colombier horiz(po);
513e12c5d1SDavid du Colombier if (lnmod)
523e12c5d1SDavid du Colombier donum();
533e12c5d1SDavid du Colombier lastl = ne;
543e12c5d1SDavid du Colombier if (brflg != 1) {
553e12c5d1SDavid du Colombier totout = 0;
563e12c5d1SDavid du Colombier } else if (ad) {
573e12c5d1SDavid du Colombier if ((lastl = ll - un) < ne)
583e12c5d1SDavid du Colombier lastl = ne;
593e12c5d1SDavid du Colombier }
603e12c5d1SDavid du Colombier if (admod && ad && (brflg != 2)) {
613e12c5d1SDavid du Colombier lastl = ne;
623e12c5d1SDavid du Colombier adsp = adrem = 0;
633e12c5d1SDavid du Colombier if (admod == 1)
643e12c5d1SDavid du Colombier un += quant(nel / 2, HOR);
653e12c5d1SDavid du Colombier else if (admod == 2)
663e12c5d1SDavid du Colombier un += nel;
673e12c5d1SDavid du Colombier }
683e12c5d1SDavid du Colombier totout++;
693e12c5d1SDavid du Colombier brflg = 0;
703e12c5d1SDavid du Colombier if (lastl + un > dip->maxl)
713e12c5d1SDavid du Colombier dip->maxl = lastl + un;
723e12c5d1SDavid du Colombier horiz(un);
733e12c5d1SDavid du Colombier if (NROFF) {
743e12c5d1SDavid du Colombier if (adrem % t.Adj)
753e12c5d1SDavid du Colombier resol = t.Hor;
763e12c5d1SDavid du Colombier else
773e12c5d1SDavid du Colombier resol = t.Adj;
783e12c5d1SDavid du Colombier } else
793e12c5d1SDavid du Colombier resol = HOR;
803e12c5d1SDavid du Colombier
813e12c5d1SDavid du Colombier lastl = ne + (nwd-1) * adsp + adrem;
823e12c5d1SDavid du Colombier for (i = line; nc > 0; ) {
833e12c5d1SDavid du Colombier if ((cbits(j = *i++)) == ' ') {
843e12c5d1SDavid du Colombier pad = 0;
853e12c5d1SDavid du Colombier do {
863e12c5d1SDavid du Colombier pad += width(j);
873e12c5d1SDavid du Colombier nc--;
883e12c5d1SDavid du Colombier } while ((cbits(j = *i++)) == ' ');
893e12c5d1SDavid du Colombier i--;
903e12c5d1SDavid du Colombier pad += adsp;
913e12c5d1SDavid du Colombier --nwd;
923e12c5d1SDavid du Colombier if (adrem) {
933e12c5d1SDavid du Colombier if (adrem < 0) {
943e12c5d1SDavid du Colombier pad -= resol;
953e12c5d1SDavid du Colombier adrem += resol;
963e12c5d1SDavid du Colombier } else if ((totout & 01) || adrem / resol >= nwd) {
973e12c5d1SDavid du Colombier pad += resol;
983e12c5d1SDavid du Colombier adrem -= resol;
993e12c5d1SDavid du Colombier }
1003e12c5d1SDavid du Colombier }
1013e12c5d1SDavid du Colombier pchar((Tchar) WORDSP);
1023e12c5d1SDavid du Colombier horiz(pad);
1033e12c5d1SDavid du Colombier } else {
1043e12c5d1SDavid du Colombier pchar(j);
1053e12c5d1SDavid du Colombier nc--;
1063e12c5d1SDavid du Colombier }
1073e12c5d1SDavid du Colombier }
1083e12c5d1SDavid du Colombier if (ic) {
1093e12c5d1SDavid du Colombier if ((k = ll - un0 - lastl + ics) > 0)
1103e12c5d1SDavid du Colombier horiz(k);
1113e12c5d1SDavid du Colombier pchar(ic);
1123e12c5d1SDavid du Colombier }
1133e12c5d1SDavid du Colombier if (icf)
1143e12c5d1SDavid du Colombier icf++;
1153e12c5d1SDavid du Colombier else
1163e12c5d1SDavid du Colombier ic = 0;
1173e12c5d1SDavid du Colombier ne = nwd = 0;
1183e12c5d1SDavid du Colombier un = in;
1193e12c5d1SDavid du Colombier setnel();
1203e12c5d1SDavid du Colombier newline(0);
1213e12c5d1SDavid du Colombier if (dip != d) {
1223e12c5d1SDavid du Colombier if (dip->dnl > dip->hnl)
1233e12c5d1SDavid du Colombier dip->hnl = dip->dnl;
1243e12c5d1SDavid du Colombier } else {
125219b2ee8SDavid du Colombier if (numtabp[NL].val > dip->hnl)
126219b2ee8SDavid du Colombier dip->hnl = numtabp[NL].val;
1273e12c5d1SDavid du Colombier }
1283e12c5d1SDavid du Colombier for (k = ls - 1; k > 0 && !trap; k--)
1293e12c5d1SDavid du Colombier newline(0);
1303e12c5d1SDavid du Colombier spread = 0;
1313e12c5d1SDavid du Colombier }
1323e12c5d1SDavid du Colombier
donum(void)1333e12c5d1SDavid du Colombier void donum(void)
1343e12c5d1SDavid du Colombier {
1353e12c5d1SDavid du Colombier int i, nw;
136219b2ee8SDavid du Colombier int lnv = numtabp[LN].val;
1373e12c5d1SDavid du Colombier
1383e12c5d1SDavid du Colombier nrbits = nmbits;
1393e12c5d1SDavid du Colombier nw = width('1' | nrbits);
1403e12c5d1SDavid du Colombier if (nn) {
1413e12c5d1SDavid du Colombier nn--;
1423e12c5d1SDavid du Colombier goto d1;
1433e12c5d1SDavid du Colombier }
144219b2ee8SDavid du Colombier if (lnv % ndf) {
145219b2ee8SDavid du Colombier numtabp[LN].val++;
1463e12c5d1SDavid du Colombier d1:
147219b2ee8SDavid du Colombier un += nw * (nmwid + nms + ni);
1483e12c5d1SDavid du Colombier return;
1493e12c5d1SDavid du Colombier }
1503e12c5d1SDavid du Colombier i = 0;
151219b2ee8SDavid du Colombier do { /* count digits in numtabp[LN].val */
1523e12c5d1SDavid du Colombier i++;
153219b2ee8SDavid du Colombier } while ((lnv /= 10) > 0);
154219b2ee8SDavid du Colombier horiz(nw * (ni + max(nmwid-i, 0)));
1553e12c5d1SDavid du Colombier nform = 0;
156219b2ee8SDavid du Colombier fnumb(numtabp[LN].val, pchar);
1573e12c5d1SDavid du Colombier un += nw * nms;
158219b2ee8SDavid du Colombier numtabp[LN].val++;
1593e12c5d1SDavid du Colombier }
1603e12c5d1SDavid du Colombier
1613e12c5d1SDavid du Colombier
text(void)1623e12c5d1SDavid du Colombier void text(void)
1633e12c5d1SDavid du Colombier {
1643e12c5d1SDavid du Colombier Tchar i;
1653e12c5d1SDavid du Colombier static int spcnt;
1663e12c5d1SDavid du Colombier
1673e12c5d1SDavid du Colombier nflush++;
168219b2ee8SDavid du Colombier numtabp[HP].val = 0;
169219b2ee8SDavid du Colombier if ((dip == d) && (numtabp[NL].val == -1)) {
1703e12c5d1SDavid du Colombier newline(1);
1713e12c5d1SDavid du Colombier return;
1723e12c5d1SDavid du Colombier }
1733e12c5d1SDavid du Colombier setnel();
1743e12c5d1SDavid du Colombier if (ce || !fi) {
1753e12c5d1SDavid du Colombier nofill();
1763e12c5d1SDavid du Colombier return;
1773e12c5d1SDavid du Colombier }
1783e12c5d1SDavid du Colombier if (pendw)
1793e12c5d1SDavid du Colombier goto t4;
1803e12c5d1SDavid du Colombier if (pendt)
1813e12c5d1SDavid du Colombier if (spcnt)
1823e12c5d1SDavid du Colombier goto t2;
1833e12c5d1SDavid du Colombier else
1843e12c5d1SDavid du Colombier goto t3;
1853e12c5d1SDavid du Colombier pendt++;
1863e12c5d1SDavid du Colombier if (spcnt)
1873e12c5d1SDavid du Colombier goto t2;
1883e12c5d1SDavid du Colombier while ((cbits(i = GETCH())) == ' ') {
1893e12c5d1SDavid du Colombier spcnt++;
190219b2ee8SDavid du Colombier numtabp[HP].val += sps;
1913e12c5d1SDavid du Colombier widthp = sps;
1923e12c5d1SDavid du Colombier }
1933e12c5d1SDavid du Colombier if (nlflg) {
1943e12c5d1SDavid du Colombier t1:
1953e12c5d1SDavid du Colombier nflush = pendt = ch = spcnt = 0;
1963e12c5d1SDavid du Colombier callsp();
1973e12c5d1SDavid du Colombier return;
1983e12c5d1SDavid du Colombier }
1993e12c5d1SDavid du Colombier ch = i;
2003e12c5d1SDavid du Colombier if (spcnt) {
2013e12c5d1SDavid du Colombier t2:
2023e12c5d1SDavid du Colombier tbreak();
2033e12c5d1SDavid du Colombier if (nc || wch)
2043e12c5d1SDavid du Colombier goto rtn;
2053e12c5d1SDavid du Colombier un += spcnt * sps;
2063e12c5d1SDavid du Colombier spcnt = 0;
2073e12c5d1SDavid du Colombier setnel();
2083e12c5d1SDavid du Colombier if (trap)
2093e12c5d1SDavid du Colombier goto rtn;
2103e12c5d1SDavid du Colombier if (nlflg)
2113e12c5d1SDavid du Colombier goto t1;
2123e12c5d1SDavid du Colombier }
2133e12c5d1SDavid du Colombier t3:
2143e12c5d1SDavid du Colombier if (spread)
2153e12c5d1SDavid du Colombier goto t5;
2163e12c5d1SDavid du Colombier if (pendw || !wch)
2173e12c5d1SDavid du Colombier t4:
2183e12c5d1SDavid du Colombier if (getword(0))
2193e12c5d1SDavid du Colombier goto t6;
2203e12c5d1SDavid du Colombier if (!movword())
2213e12c5d1SDavid du Colombier goto t3;
2223e12c5d1SDavid du Colombier t5:
2233e12c5d1SDavid du Colombier if (nlflg)
2243e12c5d1SDavid du Colombier pendt = 0;
2253e12c5d1SDavid du Colombier adsp = adrem = 0;
2263e12c5d1SDavid du Colombier if (ad) {
2273e12c5d1SDavid du Colombier if (nwd == 1)
2283e12c5d1SDavid du Colombier adsp = nel;
2293e12c5d1SDavid du Colombier else
2303e12c5d1SDavid du Colombier adsp = nel / (nwd - 1);
2313e12c5d1SDavid du Colombier adsp = (adsp / HOR) * HOR;
2323e12c5d1SDavid du Colombier adrem = nel - adsp*(nwd-1);
2333e12c5d1SDavid du Colombier }
2343e12c5d1SDavid du Colombier brflg = 1;
2353e12c5d1SDavid du Colombier tbreak();
2363e12c5d1SDavid du Colombier spread = 0;
2373e12c5d1SDavid du Colombier if (!trap)
2383e12c5d1SDavid du Colombier goto t3;
2393e12c5d1SDavid du Colombier if (!nlflg)
2403e12c5d1SDavid du Colombier goto rtn;
2413e12c5d1SDavid du Colombier t6:
2423e12c5d1SDavid du Colombier pendt = 0;
2433e12c5d1SDavid du Colombier ckul();
2443e12c5d1SDavid du Colombier rtn:
2453e12c5d1SDavid du Colombier nflush = 0;
2463e12c5d1SDavid du Colombier }
2473e12c5d1SDavid du Colombier
2483e12c5d1SDavid du Colombier
nofill(void)2493e12c5d1SDavid du Colombier void nofill(void)
2503e12c5d1SDavid du Colombier {
2513e12c5d1SDavid du Colombier int j;
2523e12c5d1SDavid du Colombier Tchar i;
2533e12c5d1SDavid du Colombier
2543e12c5d1SDavid du Colombier if (!pendnf) {
2553e12c5d1SDavid du Colombier over = 0;
2563e12c5d1SDavid du Colombier tbreak();
2573e12c5d1SDavid du Colombier if (trap)
2583e12c5d1SDavid du Colombier goto rtn;
2593e12c5d1SDavid du Colombier if (nlflg) {
2603e12c5d1SDavid du Colombier ch = nflush = 0;
2613e12c5d1SDavid du Colombier callsp();
2623e12c5d1SDavid du Colombier return;
2633e12c5d1SDavid du Colombier }
2643e12c5d1SDavid du Colombier adsp = adrem = 0;
2653e12c5d1SDavid du Colombier nwd = 10000;
2663e12c5d1SDavid du Colombier }
2673e12c5d1SDavid du Colombier while ((j = (cbits(i = GETCH()))) != '\n') {
2683e12c5d1SDavid du Colombier if (j == ohc)
2693e12c5d1SDavid du Colombier continue;
2703e12c5d1SDavid du Colombier if (j == CONT) {
2713e12c5d1SDavid du Colombier pendnf++;
2723e12c5d1SDavid du Colombier nflush = 0;
2733e12c5d1SDavid du Colombier flushi();
2743e12c5d1SDavid du Colombier ckul();
2753e12c5d1SDavid du Colombier return;
2763e12c5d1SDavid du Colombier }
2773e12c5d1SDavid du Colombier j = width(i);
2783e12c5d1SDavid du Colombier widthp = j;
279219b2ee8SDavid du Colombier numtabp[HP].val += j;
2803e12c5d1SDavid du Colombier storeline(i, j);
2813e12c5d1SDavid du Colombier }
2823e12c5d1SDavid du Colombier if (ce) {
2833e12c5d1SDavid du Colombier ce--;
2843e12c5d1SDavid du Colombier if ((i = quant(nel / 2, HOR)) > 0)
2853e12c5d1SDavid du Colombier un += i;
2863e12c5d1SDavid du Colombier }
2873e12c5d1SDavid du Colombier if (!nc)
2883e12c5d1SDavid du Colombier storeline((Tchar)FILLER, 0);
2893e12c5d1SDavid du Colombier brflg = 2;
2903e12c5d1SDavid du Colombier tbreak();
2913e12c5d1SDavid du Colombier ckul();
2923e12c5d1SDavid du Colombier rtn:
2933e12c5d1SDavid du Colombier pendnf = nflush = 0;
2943e12c5d1SDavid du Colombier }
2953e12c5d1SDavid du Colombier
2963e12c5d1SDavid du Colombier
callsp(void)2973e12c5d1SDavid du Colombier void callsp(void)
2983e12c5d1SDavid du Colombier {
2993e12c5d1SDavid du Colombier int i;
3003e12c5d1SDavid du Colombier
3013e12c5d1SDavid du Colombier if (flss)
3023e12c5d1SDavid du Colombier i = flss;
3033e12c5d1SDavid du Colombier else
3043e12c5d1SDavid du Colombier i = lss;
3053e12c5d1SDavid du Colombier flss = 0;
3063e12c5d1SDavid du Colombier casesp1(i);
3073e12c5d1SDavid du Colombier }
3083e12c5d1SDavid du Colombier
3093e12c5d1SDavid du Colombier
ckul(void)3103e12c5d1SDavid du Colombier void ckul(void)
3113e12c5d1SDavid du Colombier {
3123e12c5d1SDavid du Colombier if (ul && (--ul == 0)) {
3133e12c5d1SDavid du Colombier cu = 0;
3143e12c5d1SDavid du Colombier font = sfont;
3153e12c5d1SDavid du Colombier mchbits();
3163e12c5d1SDavid du Colombier }
3173e12c5d1SDavid du Colombier if (it && --it == 0 && itmac)
3183e12c5d1SDavid du Colombier control(itmac, 0);
3193e12c5d1SDavid du Colombier }
3203e12c5d1SDavid du Colombier
3213e12c5d1SDavid du Colombier
storeline(Tchar c,int w)3223e12c5d1SDavid du Colombier void storeline(Tchar c, int w)
3233e12c5d1SDavid du Colombier {
324219b2ee8SDavid du Colombier int diff;
325219b2ee8SDavid du Colombier
3263e12c5d1SDavid du Colombier if (linep >= line + lnsize - 2) {
327219b2ee8SDavid du Colombier lnsize += LNSIZE;
328219b2ee8SDavid du Colombier diff = linep - line;
329219b2ee8SDavid du Colombier if (( line = (Tchar *)realloc((char *)line, lnsize * sizeof(Tchar))) != NULL) {
330219b2ee8SDavid du Colombier if (linep && diff)
331219b2ee8SDavid du Colombier linep = line + diff;
332219b2ee8SDavid du Colombier } else {
333219b2ee8SDavid du Colombier if (over) {
334219b2ee8SDavid du Colombier return;
335219b2ee8SDavid du Colombier } else {
3363e12c5d1SDavid du Colombier flusho();
3373e12c5d1SDavid du Colombier ERROR "Line overflow." WARN;
3383e12c5d1SDavid du Colombier over++;
339219b2ee8SDavid du Colombier *linep++ = LEFTHAND;
340219b2ee8SDavid du Colombier w = width(LEFTHAND);
341219b2ee8SDavid du Colombier nc++;
342219b2ee8SDavid du Colombier c = '\n';
3433e12c5d1SDavid du Colombier }
344219b2ee8SDavid du Colombier }
3453e12c5d1SDavid du Colombier }
3463e12c5d1SDavid du Colombier *linep++ = c;
3473e12c5d1SDavid du Colombier ne += w;
3483e12c5d1SDavid du Colombier nel -= w;
3493e12c5d1SDavid du Colombier nc++;
3503e12c5d1SDavid du Colombier }
3513e12c5d1SDavid du Colombier
3523e12c5d1SDavid du Colombier
newline(int a)3533e12c5d1SDavid du Colombier void newline(int a)
3543e12c5d1SDavid du Colombier {
3553e12c5d1SDavid du Colombier int i, j, nlss;
3563e12c5d1SDavid du Colombier int opn;
3573e12c5d1SDavid du Colombier
358*14f51593SDavid du Colombier nlss = 0;
3593e12c5d1SDavid du Colombier if (a)
3603e12c5d1SDavid du Colombier goto nl1;
3613e12c5d1SDavid du Colombier if (dip != d) {
3623e12c5d1SDavid du Colombier j = lss;
3633e12c5d1SDavid du Colombier pchar1((Tchar)FLSS);
3643e12c5d1SDavid du Colombier if (flss)
3653e12c5d1SDavid du Colombier lss = flss;
3663e12c5d1SDavid du Colombier i = lss + dip->blss;
3673e12c5d1SDavid du Colombier dip->dnl += i;
3683e12c5d1SDavid du Colombier pchar1((Tchar)i);
3693e12c5d1SDavid du Colombier pchar1((Tchar)'\n');
3703e12c5d1SDavid du Colombier lss = j;
3713e12c5d1SDavid du Colombier dip->blss = flss = 0;
3723e12c5d1SDavid du Colombier if (dip->alss) {
3733e12c5d1SDavid du Colombier pchar1((Tchar)FLSS);
3743e12c5d1SDavid du Colombier pchar1((Tchar)dip->alss);
3753e12c5d1SDavid du Colombier pchar1((Tchar)'\n');
3763e12c5d1SDavid du Colombier dip->dnl += dip->alss;
3773e12c5d1SDavid du Colombier dip->alss = 0;
3783e12c5d1SDavid du Colombier }
3793e12c5d1SDavid du Colombier if (dip->ditrap && !dip->ditf && dip->dnl >= dip->ditrap && dip->dimac)
3803e12c5d1SDavid du Colombier if (control(dip->dimac, 0)) {
3813e12c5d1SDavid du Colombier trap++;
3823e12c5d1SDavid du Colombier dip->ditf++;
3833e12c5d1SDavid du Colombier }
3843e12c5d1SDavid du Colombier return;
3853e12c5d1SDavid du Colombier }
3863e12c5d1SDavid du Colombier j = lss;
3873e12c5d1SDavid du Colombier if (flss)
3883e12c5d1SDavid du Colombier lss = flss;
3893e12c5d1SDavid du Colombier nlss = dip->alss + dip->blss + lss;
390219b2ee8SDavid du Colombier numtabp[NL].val += nlss;
3913e12c5d1SDavid du Colombier if (TROFF && ascii) {
3923e12c5d1SDavid du Colombier dip->alss = dip->blss = 0;
3933e12c5d1SDavid du Colombier }
3943e12c5d1SDavid du Colombier pchar1((Tchar)'\n');
3953e12c5d1SDavid du Colombier flss = 0;
3963e12c5d1SDavid du Colombier lss = j;
397219b2ee8SDavid du Colombier if (numtabp[NL].val < pl)
3983e12c5d1SDavid du Colombier goto nl2;
3993e12c5d1SDavid du Colombier nl1:
400219b2ee8SDavid du Colombier ejf = dip->hnl = numtabp[NL].val = 0;
4013e12c5d1SDavid du Colombier ejl = frame;
4023e12c5d1SDavid du Colombier if (donef) {
4033e12c5d1SDavid du Colombier if ((!nc && !wch) || ndone)
4043e12c5d1SDavid du Colombier done1(0);
4053e12c5d1SDavid du Colombier ndone++;
4063e12c5d1SDavid du Colombier donef = 0;
4073e12c5d1SDavid du Colombier if (frame == stk)
4083e12c5d1SDavid du Colombier nflush++;
4093e12c5d1SDavid du Colombier }
410219b2ee8SDavid du Colombier opn = numtabp[PN].val;
411219b2ee8SDavid du Colombier numtabp[PN].val++;
4123e12c5d1SDavid du Colombier if (npnflg) {
413219b2ee8SDavid du Colombier numtabp[PN].val = npn;
4143e12c5d1SDavid du Colombier npn = npnflg = 0;
4153e12c5d1SDavid du Colombier }
4163e12c5d1SDavid du Colombier nlpn:
417219b2ee8SDavid du Colombier if (numtabp[PN].val == pfrom) {
4183e12c5d1SDavid du Colombier print++;
4193e12c5d1SDavid du Colombier pfrom = -1;
4203e12c5d1SDavid du Colombier } else if (opn == pto) {
4213e12c5d1SDavid du Colombier print = 0;
4223e12c5d1SDavid du Colombier opn = -1;
4233e12c5d1SDavid du Colombier chkpn();
4243e12c5d1SDavid du Colombier goto nlpn;
4253e12c5d1SDavid du Colombier }
4263e12c5d1SDavid du Colombier if (print)
427219b2ee8SDavid du Colombier ptpage(numtabp[PN].val); /* supposedly in a clean state so can pause */
4283e12c5d1SDavid du Colombier if (stop && print) {
4293e12c5d1SDavid du Colombier dpn++;
4303e12c5d1SDavid du Colombier if (dpn >= stop) {
4313e12c5d1SDavid du Colombier dpn = 0;
4323e12c5d1SDavid du Colombier ptpause();
4333e12c5d1SDavid du Colombier }
4343e12c5d1SDavid du Colombier }
4353e12c5d1SDavid du Colombier nl2:
4363e12c5d1SDavid du Colombier trap = 0;
437219b2ee8SDavid du Colombier if (numtabp[NL].val == 0) {
4383e12c5d1SDavid du Colombier if ((j = findn(0)) != NTRAP)
4393e12c5d1SDavid du Colombier trap = control(mlist[j], 0);
440219b2ee8SDavid du Colombier } else if ((i = findt(numtabp[NL].val - nlss)) <= nlss) {
441219b2ee8SDavid du Colombier if ((j = findn1(numtabp[NL].val - nlss + i)) == NTRAP) {
4423e12c5d1SDavid du Colombier flusho();
4433e12c5d1SDavid du Colombier ERROR "Trap botch." WARN;
4443e12c5d1SDavid du Colombier done2(-5);
4453e12c5d1SDavid du Colombier }
4463e12c5d1SDavid du Colombier trap = control(mlist[j], 0);
4473e12c5d1SDavid du Colombier }
4483e12c5d1SDavid du Colombier }
4493e12c5d1SDavid du Colombier
4503e12c5d1SDavid du Colombier
findn1(int a)4513e12c5d1SDavid du Colombier findn1(int a)
4523e12c5d1SDavid du Colombier {
4533e12c5d1SDavid du Colombier int i, j;
4543e12c5d1SDavid du Colombier
4553e12c5d1SDavid du Colombier for (i = 0; i < NTRAP; i++) {
4563e12c5d1SDavid du Colombier if (mlist[i]) {
4573e12c5d1SDavid du Colombier if ((j = nlist[i]) < 0)
4583e12c5d1SDavid du Colombier j += pl;
4593e12c5d1SDavid du Colombier if (j == a)
4603e12c5d1SDavid du Colombier break;
4613e12c5d1SDavid du Colombier }
4623e12c5d1SDavid du Colombier }
4633e12c5d1SDavid du Colombier return(i);
4643e12c5d1SDavid du Colombier }
4653e12c5d1SDavid du Colombier
4663e12c5d1SDavid du Colombier
chkpn(void)4673e12c5d1SDavid du Colombier void chkpn(void)
4683e12c5d1SDavid du Colombier {
4693e12c5d1SDavid du Colombier pto = *(pnp++);
4703e12c5d1SDavid du Colombier pfrom = pto>=0 ? pto : -pto;
471219b2ee8SDavid du Colombier if (pto == -INT_MAX) {
4723e12c5d1SDavid du Colombier flusho();
4733e12c5d1SDavid du Colombier done1(0);
4743e12c5d1SDavid du Colombier }
4753e12c5d1SDavid du Colombier if (pto < 0) {
4763e12c5d1SDavid du Colombier pto = -pto;
4773e12c5d1SDavid du Colombier print++;
4783e12c5d1SDavid du Colombier pfrom = 0;
4793e12c5d1SDavid du Colombier }
4803e12c5d1SDavid du Colombier }
4813e12c5d1SDavid du Colombier
4823e12c5d1SDavid du Colombier
findt(int a)4833e12c5d1SDavid du Colombier findt(int a)
4843e12c5d1SDavid du Colombier {
4853e12c5d1SDavid du Colombier int i, j, k;
4863e12c5d1SDavid du Colombier
487219b2ee8SDavid du Colombier k = INT_MAX;
4883e12c5d1SDavid du Colombier if (dip != d) {
4893e12c5d1SDavid du Colombier if (dip->dimac && (i = dip->ditrap - a) > 0)
4903e12c5d1SDavid du Colombier k = i;
4913e12c5d1SDavid du Colombier return(k);
4923e12c5d1SDavid du Colombier }
4933e12c5d1SDavid du Colombier for (i = 0; i < NTRAP; i++) {
4943e12c5d1SDavid du Colombier if (mlist[i]) {
4953e12c5d1SDavid du Colombier if ((j = nlist[i]) < 0)
4963e12c5d1SDavid du Colombier j += pl;
4973e12c5d1SDavid du Colombier if ((j -= a) <= 0)
4983e12c5d1SDavid du Colombier continue;
4993e12c5d1SDavid du Colombier if (j < k)
5003e12c5d1SDavid du Colombier k = j;
5013e12c5d1SDavid du Colombier }
5023e12c5d1SDavid du Colombier }
5033e12c5d1SDavid du Colombier i = pl - a;
5043e12c5d1SDavid du Colombier if (k > i)
5053e12c5d1SDavid du Colombier k = i;
5063e12c5d1SDavid du Colombier return(k);
5073e12c5d1SDavid du Colombier }
5083e12c5d1SDavid du Colombier
5093e12c5d1SDavid du Colombier
findt1(void)5103e12c5d1SDavid du Colombier findt1(void)
5113e12c5d1SDavid du Colombier {
5123e12c5d1SDavid du Colombier int i;
5133e12c5d1SDavid du Colombier
5143e12c5d1SDavid du Colombier if (dip != d)
5153e12c5d1SDavid du Colombier i = dip->dnl;
5163e12c5d1SDavid du Colombier else
517219b2ee8SDavid du Colombier i = numtabp[NL].val;
5183e12c5d1SDavid du Colombier return(findt(i));
5193e12c5d1SDavid du Colombier }
5203e12c5d1SDavid du Colombier
5213e12c5d1SDavid du Colombier
eject(Stack * a)5223e12c5d1SDavid du Colombier void eject(Stack *a)
5233e12c5d1SDavid du Colombier {
5243e12c5d1SDavid du Colombier int savlss;
5253e12c5d1SDavid du Colombier
5263e12c5d1SDavid du Colombier if (dip != d)
5273e12c5d1SDavid du Colombier return;
5283e12c5d1SDavid du Colombier ejf++;
5293e12c5d1SDavid du Colombier if (a)
5303e12c5d1SDavid du Colombier ejl = a;
5313e12c5d1SDavid du Colombier else
5323e12c5d1SDavid du Colombier ejl = frame;
5333e12c5d1SDavid du Colombier if (trap)
5343e12c5d1SDavid du Colombier return;
5353e12c5d1SDavid du Colombier e1:
5363e12c5d1SDavid du Colombier savlss = lss;
537219b2ee8SDavid du Colombier lss = findt(numtabp[NL].val);
5383e12c5d1SDavid du Colombier newline(0);
5393e12c5d1SDavid du Colombier lss = savlss;
540219b2ee8SDavid du Colombier if (numtabp[NL].val && !trap)
5413e12c5d1SDavid du Colombier goto e1;
5423e12c5d1SDavid du Colombier }
5433e12c5d1SDavid du Colombier
5443e12c5d1SDavid du Colombier
movword(void)5453e12c5d1SDavid du Colombier movword(void)
5463e12c5d1SDavid du Colombier {
5473e12c5d1SDavid du Colombier int w;
5483e12c5d1SDavid du Colombier Tchar i, *wp;
5493e12c5d1SDavid du Colombier int savwch, hys;
5503e12c5d1SDavid du Colombier
5513e12c5d1SDavid du Colombier over = 0;
5523e12c5d1SDavid du Colombier wp = wordp;
5533e12c5d1SDavid du Colombier if (!nwd) {
5543e12c5d1SDavid du Colombier while (cbits(*wp++) == ' ') {
5553e12c5d1SDavid du Colombier wch--;
5563e12c5d1SDavid du Colombier wne -= sps;
5573e12c5d1SDavid du Colombier }
5583e12c5d1SDavid du Colombier wp--;
5593e12c5d1SDavid du Colombier }
5603e12c5d1SDavid du Colombier if (wne > nel && !hyoff && hyf && (!nwd || nel > 3 * sps) &&
5613e12c5d1SDavid du Colombier (!(hyf & 02) || (findt1() > lss)))
5623e12c5d1SDavid du Colombier hyphen(wp);
5633e12c5d1SDavid du Colombier savwch = wch;
5643e12c5d1SDavid du Colombier hyp = hyptr;
5653e12c5d1SDavid du Colombier nhyp = 0;
5663e12c5d1SDavid du Colombier while (*hyp && *hyp <= wp)
5673e12c5d1SDavid du Colombier hyp++;
5683e12c5d1SDavid du Colombier while (wch) {
5693e12c5d1SDavid du Colombier if (hyoff != 1 && *hyp == wp) {
5703e12c5d1SDavid du Colombier hyp++;
5713e12c5d1SDavid du Colombier if (!wdstart || (wp > wdstart + 1 && wp < wdend &&
5723e12c5d1SDavid du Colombier (!(hyf & 04) || wp < wdend - 1) && /* 04 => last 2 */
5733e12c5d1SDavid du Colombier (!(hyf & 010) || wp > wdstart + 2))) { /* 010 => 1st 2 */
5743e12c5d1SDavid du Colombier nhyp++;
5753e12c5d1SDavid du Colombier storeline((Tchar)IMP, 0);
5763e12c5d1SDavid du Colombier }
5773e12c5d1SDavid du Colombier }
5783e12c5d1SDavid du Colombier i = *wp++;
5793e12c5d1SDavid du Colombier w = width(i);
5803e12c5d1SDavid du Colombier wne -= w;
5813e12c5d1SDavid du Colombier wch--;
5823e12c5d1SDavid du Colombier storeline(i, w);
5833e12c5d1SDavid du Colombier }
5843e12c5d1SDavid du Colombier if (nel >= 0) {
5853e12c5d1SDavid du Colombier nwd++;
5863e12c5d1SDavid du Colombier return(0); /* line didn't fill up */
5873e12c5d1SDavid du Colombier }
5883e12c5d1SDavid du Colombier if (TROFF)
5893e12c5d1SDavid du Colombier xbits((Tchar)HYPHEN, 1);
5903e12c5d1SDavid du Colombier hys = width((Tchar)HYPHEN);
5913e12c5d1SDavid du Colombier m1:
5923e12c5d1SDavid du Colombier if (!nhyp) {
5933e12c5d1SDavid du Colombier if (!nwd)
5943e12c5d1SDavid du Colombier goto m3;
5953e12c5d1SDavid du Colombier if (wch == savwch)
5963e12c5d1SDavid du Colombier goto m4;
5973e12c5d1SDavid du Colombier }
5983e12c5d1SDavid du Colombier if (*--linep != IMP)
5993e12c5d1SDavid du Colombier goto m5;
6003e12c5d1SDavid du Colombier if (!(--nhyp))
6013e12c5d1SDavid du Colombier if (!nwd)
6023e12c5d1SDavid du Colombier goto m2;
6033e12c5d1SDavid du Colombier if (nel < hys) {
6043e12c5d1SDavid du Colombier nc--;
6053e12c5d1SDavid du Colombier goto m1;
6063e12c5d1SDavid du Colombier }
6073e12c5d1SDavid du Colombier m2:
6083e12c5d1SDavid du Colombier if ((i = cbits(*(linep - 1))) != '-' && i != EMDASH) {
6093e12c5d1SDavid du Colombier *linep = (*(linep - 1) & SFMASK) | HYPHEN;
6103e12c5d1SDavid du Colombier w = width(*linep);
6113e12c5d1SDavid du Colombier nel -= w;
6123e12c5d1SDavid du Colombier ne += w;
6133e12c5d1SDavid du Colombier linep++;
6143e12c5d1SDavid du Colombier }
6153e12c5d1SDavid du Colombier m3:
6163e12c5d1SDavid du Colombier nwd++;
6173e12c5d1SDavid du Colombier m4:
6183e12c5d1SDavid du Colombier wordp = wp;
6193e12c5d1SDavid du Colombier return(1); /* line filled up */
6203e12c5d1SDavid du Colombier m5:
6213e12c5d1SDavid du Colombier nc--;
6223e12c5d1SDavid du Colombier w = width(*linep);
6233e12c5d1SDavid du Colombier ne -= w;
6243e12c5d1SDavid du Colombier nel += w;
6253e12c5d1SDavid du Colombier wne += w;
6263e12c5d1SDavid du Colombier wch++;
6273e12c5d1SDavid du Colombier wp--;
6283e12c5d1SDavid du Colombier goto m1;
6293e12c5d1SDavid du Colombier }
6303e12c5d1SDavid du Colombier
6313e12c5d1SDavid du Colombier
horiz(int i)6323e12c5d1SDavid du Colombier void horiz(int i)
6333e12c5d1SDavid du Colombier {
6343e12c5d1SDavid du Colombier vflag = 0;
6353e12c5d1SDavid du Colombier if (i)
6363e12c5d1SDavid du Colombier pchar(makem(i));
6373e12c5d1SDavid du Colombier }
6383e12c5d1SDavid du Colombier
6393e12c5d1SDavid du Colombier
setnel(void)6403e12c5d1SDavid du Colombier void setnel(void)
6413e12c5d1SDavid du Colombier {
6423e12c5d1SDavid du Colombier if (!nc) {
6433e12c5d1SDavid du Colombier linep = line;
6443e12c5d1SDavid du Colombier if (un1 >= 0) {
6453e12c5d1SDavid du Colombier un = un1;
6463e12c5d1SDavid du Colombier un1 = -1;
6473e12c5d1SDavid du Colombier }
6483e12c5d1SDavid du Colombier nel = ll - un;
6493e12c5d1SDavid du Colombier ne = adsp = adrem = 0;
6503e12c5d1SDavid du Colombier }
6513e12c5d1SDavid du Colombier }
6523e12c5d1SDavid du Colombier
6533e12c5d1SDavid du Colombier
getword(int x)6543e12c5d1SDavid du Colombier getword(int x)
6553e12c5d1SDavid du Colombier {
6563e12c5d1SDavid du Colombier int j, k;
6573e12c5d1SDavid du Colombier Tchar i, *wp;
6583e12c5d1SDavid du Colombier int noword;
6593e12c5d1SDavid du Colombier int obits;
6603e12c5d1SDavid du Colombier
661*14f51593SDavid du Colombier j = noword = 0;
6623e12c5d1SDavid du Colombier if (x)
6633e12c5d1SDavid du Colombier if (pendw) {
6643e12c5d1SDavid du Colombier *pendw = 0;
6653e12c5d1SDavid du Colombier goto rtn;
6663e12c5d1SDavid du Colombier }
6673e12c5d1SDavid du Colombier if (wordp = pendw)
6683e12c5d1SDavid du Colombier goto g1;
6693e12c5d1SDavid du Colombier hyp = hyptr;
6703e12c5d1SDavid du Colombier wordp = word;
6713e12c5d1SDavid du Colombier over = wne = wch = 0;
6723e12c5d1SDavid du Colombier hyoff = 0;
6733e12c5d1SDavid du Colombier obits = chbits;
6743e12c5d1SDavid du Colombier while (1) { /* picks up 1st char of word */
6753e12c5d1SDavid du Colombier j = cbits(i = GETCH());
6763e12c5d1SDavid du Colombier if (j == '\n') {
6773e12c5d1SDavid du Colombier wne = wch = 0;
6783e12c5d1SDavid du Colombier noword = 1;
6793e12c5d1SDavid du Colombier goto rtn;
6803e12c5d1SDavid du Colombier }
6813e12c5d1SDavid du Colombier if (j == ohc) {
6823e12c5d1SDavid du Colombier hyoff = 1; /* 1 => don't hyphenate */
6833e12c5d1SDavid du Colombier continue;
6843e12c5d1SDavid du Colombier }
6853e12c5d1SDavid du Colombier if (j == ' ') {
686219b2ee8SDavid du Colombier numtabp[HP].val += sps;
6873e12c5d1SDavid du Colombier widthp = sps;
6883e12c5d1SDavid du Colombier storeword(i, sps);
6893e12c5d1SDavid du Colombier continue;
6903e12c5d1SDavid du Colombier }
6913e12c5d1SDavid du Colombier break;
6923e12c5d1SDavid du Colombier }
6933e12c5d1SDavid du Colombier storeword(' ' | obits, sps);
6943e12c5d1SDavid du Colombier if (spflg) {
6953e12c5d1SDavid du Colombier storeword(' ' | obits, sps);
6963e12c5d1SDavid du Colombier spflg = 0;
6973e12c5d1SDavid du Colombier }
6983e12c5d1SDavid du Colombier g0:
6993e12c5d1SDavid du Colombier if (j == CONT) {
7003e12c5d1SDavid du Colombier pendw = wordp;
7013e12c5d1SDavid du Colombier nflush = 0;
7023e12c5d1SDavid du Colombier flushi();
7033e12c5d1SDavid du Colombier return(1);
7043e12c5d1SDavid du Colombier }
7053e12c5d1SDavid du Colombier if (hyoff != 1) {
7063e12c5d1SDavid du Colombier if (j == ohc) {
7073e12c5d1SDavid du Colombier hyoff = 2;
7083e12c5d1SDavid du Colombier *hyp++ = wordp;
7093e12c5d1SDavid du Colombier if (hyp > hyptr + NHYP - 1)
7103e12c5d1SDavid du Colombier hyp = hyptr + NHYP - 1;
7113e12c5d1SDavid du Colombier goto g1;
7123e12c5d1SDavid du Colombier }
713219b2ee8SDavid du Colombier if (((j == '-' || j == EMDASH)) && !(i & ZBIT)) /* zbit avoids \X */
7143e12c5d1SDavid du Colombier if (wordp > word + 1) {
7153e12c5d1SDavid du Colombier hyoff = 2;
7163e12c5d1SDavid du Colombier *hyp++ = wordp + 1;
7173e12c5d1SDavid du Colombier if (hyp > hyptr + NHYP - 1)
7183e12c5d1SDavid du Colombier hyp = hyptr + NHYP - 1;
7193e12c5d1SDavid du Colombier }
7203e12c5d1SDavid du Colombier }
7213e12c5d1SDavid du Colombier j = width(i);
722219b2ee8SDavid du Colombier numtabp[HP].val += j;
7233e12c5d1SDavid du Colombier storeword(i, j);
7243e12c5d1SDavid du Colombier g1:
7253e12c5d1SDavid du Colombier j = cbits(i = GETCH());
7263e12c5d1SDavid du Colombier if (j != ' ') {
7273e12c5d1SDavid du Colombier static char *sentchar = ".?!"; /* sentence terminators */
7283e12c5d1SDavid du Colombier if (j != '\n')
7293e12c5d1SDavid du Colombier goto g0;
7303e12c5d1SDavid du Colombier wp = wordp-1; /* handle extra space at end of sentence */
7313e12c5d1SDavid du Colombier while (wp >= word) {
7323e12c5d1SDavid du Colombier j = cbits(*wp--);
7333e12c5d1SDavid du Colombier if (j=='"' || j=='\'' || j==')' || j==']' || j=='*' || j==DAGGER)
7343e12c5d1SDavid du Colombier continue;
7353e12c5d1SDavid du Colombier for (k = 0; sentchar[k]; k++)
7363e12c5d1SDavid du Colombier if (j == sentchar[k]) {
7373e12c5d1SDavid du Colombier spflg++;
7383e12c5d1SDavid du Colombier break;
7393e12c5d1SDavid du Colombier }
7403e12c5d1SDavid du Colombier break;
7413e12c5d1SDavid du Colombier }
7423e12c5d1SDavid du Colombier }
7433e12c5d1SDavid du Colombier *wordp = 0;
744219b2ee8SDavid du Colombier numtabp[HP].val += sps;
7453e12c5d1SDavid du Colombier rtn:
7463e12c5d1SDavid du Colombier for (wp = word; *wp; wp++) {
747219b2ee8SDavid du Colombier if (ismot(j))
748219b2ee8SDavid du Colombier break; /* drechsler */
7493e12c5d1SDavid du Colombier j = cbits(*wp);
7503e12c5d1SDavid du Colombier if (j == ' ')
7513e12c5d1SDavid du Colombier continue;
752219b2ee8SDavid du Colombier if (!(isascii(j) && isdigit(j)) && j != '-')
7533e12c5d1SDavid du Colombier break;
7543e12c5d1SDavid du Colombier }
7553e12c5d1SDavid du Colombier if (*wp == 0) /* all numbers, so don't hyphenate */
7563e12c5d1SDavid du Colombier hyoff = 1;
7573e12c5d1SDavid du Colombier wdstart = 0;
7583e12c5d1SDavid du Colombier wordp = word;
7593e12c5d1SDavid du Colombier pendw = 0;
7603e12c5d1SDavid du Colombier *hyp++ = 0;
7613e12c5d1SDavid du Colombier setnel();
7623e12c5d1SDavid du Colombier return(noword);
7633e12c5d1SDavid du Colombier }
7643e12c5d1SDavid du Colombier
7653e12c5d1SDavid du Colombier
storeword(Tchar c,int w)7663e12c5d1SDavid du Colombier void storeword(Tchar c, int w)
7673e12c5d1SDavid du Colombier {
768219b2ee8SDavid du Colombier Tchar *savp;
769219b2ee8SDavid du Colombier int i;
770219b2ee8SDavid du Colombier
771219b2ee8SDavid du Colombier if (wordp >= word + wdsize - 2) {
772219b2ee8SDavid du Colombier wdsize += WDSIZE;
773219b2ee8SDavid du Colombier savp = word;
774219b2ee8SDavid du Colombier if (( word = (Tchar *)realloc((char *)word, wdsize * sizeof(Tchar))) != NULL) {
775219b2ee8SDavid du Colombier if (wordp)
776219b2ee8SDavid du Colombier wordp = word + (wordp - savp);
777219b2ee8SDavid du Colombier if (pendw)
778219b2ee8SDavid du Colombier pendw = word + (pendw - savp);
779219b2ee8SDavid du Colombier if (wdstart)
780219b2ee8SDavid du Colombier wdstart = word + (wdstart - savp);
781219b2ee8SDavid du Colombier if (wdend)
782219b2ee8SDavid du Colombier wdend = word + (wdend - savp);
783219b2ee8SDavid du Colombier for (i = 0; i < NHYP; i++)
784219b2ee8SDavid du Colombier if (hyptr[i])
785219b2ee8SDavid du Colombier hyptr[i] = word + (hyptr[i] - savp);
786219b2ee8SDavid du Colombier } else {
787219b2ee8SDavid du Colombier if (over) {
788219b2ee8SDavid du Colombier return;
789219b2ee8SDavid du Colombier } else {
7903e12c5d1SDavid du Colombier flusho();
7913e12c5d1SDavid du Colombier ERROR "Word overflow." WARN;
7923e12c5d1SDavid du Colombier over++;
7933e12c5d1SDavid du Colombier c = LEFTHAND;
794219b2ee8SDavid du Colombier w = width(LEFTHAND);
7953e12c5d1SDavid du Colombier }
7963e12c5d1SDavid du Colombier }
797219b2ee8SDavid du Colombier }
7983e12c5d1SDavid du Colombier widthp = w;
7993e12c5d1SDavid du Colombier wne += w;
8003e12c5d1SDavid du Colombier *wordp++ = c;
8013e12c5d1SDavid du Colombier wch++;
8023e12c5d1SDavid du Colombier }
8033e12c5d1SDavid du Colombier
8043e12c5d1SDavid du Colombier
gettch(void)8053e12c5d1SDavid du Colombier Tchar gettch(void)
8063e12c5d1SDavid du Colombier {
8073e12c5d1SDavid du Colombier extern int c_isalnum;
8083e12c5d1SDavid du Colombier Tchar i;
8093e12c5d1SDavid du Colombier int j;
8103e12c5d1SDavid du Colombier
8113e12c5d1SDavid du Colombier if (TROFF)
8123e12c5d1SDavid du Colombier return getch();
8133e12c5d1SDavid du Colombier
8143e12c5d1SDavid du Colombier i = getch();
8153e12c5d1SDavid du Colombier j = cbits(i);
8163e12c5d1SDavid du Colombier if (ismot(i) || fbits(i) != ulfont)
8173e12c5d1SDavid du Colombier return(i);
8183e12c5d1SDavid du Colombier if (cu) {
8193e12c5d1SDavid du Colombier if (trtab[j] == ' ') {
8203e12c5d1SDavid du Colombier setcbits(i, '_');
8213e12c5d1SDavid du Colombier setfbits(i, FT); /* default */
8223e12c5d1SDavid du Colombier }
8233e12c5d1SDavid du Colombier return(i);
8243e12c5d1SDavid du Colombier }
8253e12c5d1SDavid du Colombier /* should test here for characters that ought to be underlined */
8263e12c5d1SDavid du Colombier /* in the old nroff, that was the 200 bit on the width! */
8273e12c5d1SDavid du Colombier /* for now, just do letters, digits and certain special chars */
8283e12c5d1SDavid du Colombier if (j <= 127) {
8293e12c5d1SDavid du Colombier if (!isalnum(j))
8303e12c5d1SDavid du Colombier setfbits(i, FT);
8313e12c5d1SDavid du Colombier } else {
8323e12c5d1SDavid du Colombier if (j < c_isalnum)
8333e12c5d1SDavid du Colombier setfbits(i, FT);
8343e12c5d1SDavid du Colombier }
8353e12c5d1SDavid du Colombier return(i);
8363e12c5d1SDavid du Colombier }
837