Annotation of researchv8dc/cmd/troff/n6.c, revision 1.1.1.1

1.1       root        1: #include "tdef.h"
                      2: #include "tw.h"
                      3: #include "ext.h"
                      4: #include <ctype.h>
                      5: 
                      6: /*
                      7:  * n6.c -- width functions, sizes and fonts
                      8: */
                      9: 
                     10: int    bdtab[NFONT+1] ={ 0, 0, 0, 3, 3, 0, };
                     11: int    sbold = 0;
                     12: int    fontlab[NFONT+1] = { 0, 'R', 'I', 'B', PAIR('B','I'), 'S', 0 };
                     13: 
                     14: extern int     nchtab;
                     15: 
                     16: width(j)
                     17: register tchar j;
                     18: {
                     19:        register i, k;
                     20: 
                     21:        if (j & (ZBIT|MOT)) {
                     22:                if (iszbit(j))
                     23:                        return(0);
                     24:                if (isvmot(j))
                     25:                        return(0);
                     26:                k = absmot(j);
                     27:                if (isnmot(j))
                     28:                        k = -k;
                     29:                return(k);
                     30:        }
                     31:        i = cbits(j);
                     32:        if (i < ' ') {
                     33:                if (i == '\b')
                     34:                        return(-widthp);
                     35:                if (i == PRESC)
                     36:                        i = eschar;
                     37:                else if (iscontrol(i))
                     38:                        return(0);
                     39:        }
                     40:        if (i==ohc)
                     41:                return(0);
                     42:        i = trtab[i];
                     43:        if (i < 32)
                     44:                return(0);
                     45:        k = t.width[i] * t.Char;
                     46:        widthp = k;
                     47:        return(k);
                     48: }
                     49: 
                     50: 
                     51: tchar setch(c)
                     52: {
                     53:        register j;
                     54:        char    temp[50];
                     55:        register char   *s;
                     56: 
                     57:        s = temp;
                     58:        if (c == '(') { /* \(xx */
                     59:                if ((*s++ = getach()) == 0 || (*s++ = getach()) == 0)
                     60:                        return(0);
                     61:        } else {        /* \C'...' */
                     62:                c = getach();
                     63:                while ((*s = getach()) != c && *s != '\n')
                     64:                        s++;
                     65:        }
                     66:        *s = '\0';
                     67:        if ((j = findch(temp)) > 0)
                     68:                return j | chbits;
                     69:        else
                     70:                return 0;
                     71: }
                     72: 
                     73: tchar setabs()         /* set absolute char from \C'...' */
                     74: {                      /* for now, a no-op */
                     75:        int i, n, nf;
                     76: 
                     77:        getch();
                     78:        n = 0;
                     79:        n = inumb(&n);
                     80:        getch();
                     81:        if (nonumb)
                     82:                return 0;
                     83:        return n + nchtab + 128;
                     84: }
                     85: 
                     86: findft(i)
                     87: register int   i;
                     88: {
                     89:        register k;
                     90: 
                     91:        if ((k = i - '0') >= 0 && k <= nfonts && k < smnt)
                     92:                return(k);
                     93:        for (k = 0; fontlab[k] != i; k++)
                     94:                if (k > nfonts)
                     95:                        return(-1);
                     96:        return(k);
                     97: }
                     98: 
                     99: 
                    100: caseps()
                    101: {
                    102: }
                    103: 
                    104: 
                    105: mchbits()
                    106: {
                    107:        chbits = 0;
                    108:        setfbits(chbits, font);
                    109:        sps = width(' ' | chbits);
                    110: }
                    111: 
                    112: 
                    113: setps()
                    114: {
                    115:        register i, j;
                    116: 
                    117:        i = cbits(getch());
                    118:        if (isdigit(i)) {               /* \sd or \sdd */
                    119:                i -= '0';
                    120:                if (i == 0)             /* \s0 */
                    121:                        ;
                    122:                else if (i <= 3 && isdigit(j = cbits(ch=getch()))) {    /* \sdd */
                    123:                        ch = 0;
                    124:                }
                    125:        } else if (i == '(') {          /* \s(dd */
                    126:                getch();
                    127:                getch();
                    128:        } else if (i == '+' || i == '-') {      /* \s+, \s- */
                    129:                j = cbits(getch());
                    130:                if (isdigit(j)) {               /* \s+d, \s-d */
                    131:                        ;
                    132:                } else if (j == '(') {          /* \s+(dd, \s-(dd */
                    133:                        getch();
                    134:                        getch();
                    135:                }
                    136:        }
                    137: }
                    138: 
                    139: 
                    140: tchar setht()          /* set character height from \H'...' */
                    141: {
                    142:        int     n;
                    143:        tchar c;
                    144: 
                    145:        getch();
                    146:        n = inumb(&apts);
                    147:        getch();
                    148:        return(0);
                    149: }
                    150: 
                    151: 
                    152: tchar setslant()               /* set slant from \S'...' */
                    153: {
                    154:        int     n;
                    155:        tchar c;
                    156: 
                    157:        getch();
                    158:        n = 0;
                    159:        n = inumb(&n);
                    160:        getch();
                    161:        return(0);
                    162: }
                    163: 
                    164: 
                    165: caseft()
                    166: {
                    167:        skip();
                    168:        setfont(1);
                    169: }
                    170: 
                    171: 
                    172: setfont(a)
                    173: int    a;
                    174: {
                    175:        register i, j;
                    176: 
                    177:        if (a)
                    178:                i = getrq();
                    179:        else 
                    180:                i = getsn();
                    181:        if (!i || i == 'P') {
                    182:                j = font1;
                    183:                goto s0;
                    184:        }
                    185:        if (i == 'S' || i == '0')
                    186:                return;
                    187:        if ((j = findft(i, fontlab)) == -1)
                    188:                return;
                    189: s0:
                    190:        font1 = font;
                    191:        font = j;
                    192:        mchbits();
                    193: }
                    194: 
                    195: 
                    196: setwd()
                    197: {
                    198:        register base, wid;
                    199:        register tchar i;
                    200:        int     delim, emsz, k;
                    201:        int     savhp, savapts, savapts1, savfont, savfont1, savpts, savpts1;
                    202: 
                    203:        base = numtab[ST].val = numtab[ST].val = wid = numtab[CT].val = 0;
                    204:        if (ismot(i = getch()))
                    205:                return;
                    206:        delim = cbits(i);
                    207:        savhp = numtab[HP].val;
                    208:        numtab[HP].val = 0;
                    209:        savapts = apts;
                    210:        savapts1 = apts1;
                    211:        savfont = font;
                    212:        savfont1 = font1;
                    213:        savpts = pts;
                    214:        savpts1 = pts1;
                    215:        setwdf++;
                    216:        while (cbits(i = getch()) != delim && !nlflg) {
                    217:                k = width(i);
                    218:                wid += k;
                    219:                numtab[HP].val += k;
                    220:                if (!ismot(i)) {
                    221:                        emsz = (INCH * pts + 36) / 72;
                    222:                } else if (isvmot(i)) {
                    223:                        k = absmot(i);
                    224:                        if (isnmot(i))
                    225:                                k = -k;
                    226:                        base -= k;
                    227:                        emsz = 0;
                    228:                } else 
                    229:                        continue;
                    230:                if (base < numtab[SB].val)
                    231:                        numtab[SB].val = base;
                    232:                if ((k = base + emsz) > numtab[ST].val)
                    233:                        numtab[ST].val = k;
                    234:        }
                    235:        setn1(wid, 0, (tchar) 0);
                    236:        numtab[HP].val = savhp;
                    237:        apts = savapts;
                    238:        apts1 = savapts1;
                    239:        font = savfont;
                    240:        font1 = savfont1;
                    241:        pts = savpts;
                    242:        pts1 = savpts1;
                    243:        mchbits();
                    244:        setwdf = 0;
                    245: }
                    246: 
                    247: 
                    248: tchar vmot()
                    249: {
                    250:        dfact = lss;
                    251:        vflag++;
                    252:        return(mot());
                    253: }
                    254: 
                    255: 
                    256: tchar hmot()
                    257: {
                    258:        dfact = EM;
                    259:        return(mot());
                    260: }
                    261: 
                    262: 
                    263: tchar mot()
                    264: {
                    265:        register int j, n;
                    266:        register tchar i;
                    267: 
                    268:        j = HOR;
                    269:        getch(); /*eat delim*/
                    270:        if (n = atoi()) {
                    271:                if (vflag)
                    272:                        j = VERT;
                    273:                i = makem(quant(n, j));
                    274:        } else
                    275:                i = 0;
                    276:        getch();
                    277:        vflag = 0;
                    278:        dfact = 1;
                    279:        return(i);
                    280: }
                    281: 
                    282: 
                    283: tchar sethl(k)
                    284: int    k;
                    285: {
                    286:        register j;
                    287:        tchar i;
                    288: 
                    289:        j = t.Halfline;
                    290:        if (k == 'u')
                    291:                j = -j;
                    292:        else if (k == 'r')
                    293:                j = -2 * j;
                    294:        vflag++;
                    295:        i = makem(j);
                    296:        vflag = 0;
                    297:        return(i);
                    298: }
                    299: 
                    300: 
                    301: tchar makem(i)
                    302: int    i;
                    303: {
                    304:        register tchar j;
                    305: 
                    306:        if ((j = i) < 0)
                    307:                j = -j;
                    308:        j |= MOT;
                    309:        if (i < 0)
                    310:                j |= NMOT;
                    311:        if (vflag)
                    312:                j |= VMOT;
                    313:        return(j);
                    314: }
                    315: 
                    316: 
                    317: tchar getlg(i)
                    318: tchar  i;
                    319: {
                    320:        return(i);
                    321: }
                    322: 
                    323: 
                    324: caselg()
                    325: {
                    326: }
                    327: 
                    328: 
                    329: casefp()
                    330: {
                    331:        register i, j;
                    332: 
                    333:        skip();
                    334:        if ((i = cbits(getch()) - '0') < 0 || i > nfonts)
                    335:                return;
                    336:        if (skip() || !(j = getrq()))
                    337:                return;
                    338:        fontlab[i] = j;
                    339: }
                    340: 
                    341: 
                    342: casecs()
                    343: {
                    344: }
                    345: 
                    346: 
                    347: casebd()
                    348: {
                    349:        register i, j, k;
                    350: 
                    351:        k = 0;
                    352: bd0:
                    353:        if (skip() || !(i = getrq()) || (j = findft(i)) == -1) {
                    354:                if (k)
                    355:                        goto bd1;
                    356:                else 
                    357:                        return;
                    358:        }
                    359:        if (j == smnt) {
                    360:                k = smnt;
                    361:                goto bd0;
                    362:        }
                    363:        if (k) {
                    364:                sbold = j;
                    365:                j = k;
                    366:        }
                    367: bd1:
                    368:        skip();
                    369:        noscale++;
                    370:        bdtab[j] = atoi();
                    371:        noscale = 0;
                    372: }
                    373: 
                    374: 
                    375: casevs()
                    376: {
                    377:        register i;
                    378: 
                    379:        skip();
                    380:        vflag++;
                    381:        dfact = INCH; /*default scaling is points!*/
                    382:        dfactd = 72;
                    383:        res = VERT;
                    384:        i = inumb(&lss);
                    385:        if (nonumb)
                    386:                i = lss1;
                    387:        if (i < VERT)
                    388:                i = VERT;       /* was VERT */
                    389:        lss1 = lss;
                    390:        lss = i;
                    391: }
                    392: 
                    393: 
                    394: 
                    395: 
                    396: casess()
                    397: {
                    398: }
                    399: 
                    400: 
                    401: tchar xlss()
                    402: {
                    403:        /* stores \x'...' into
                    404:        /* two successive tchars.
                    405:        /* the first contains HX, the second the value,
                    406:        /* encoded as a vertical motion.
                    407:        /* decoding is done in n2.c by pchar().
                    408:        */
                    409:        int     i;
                    410: 
                    411:        getch();
                    412:        dfact = lss;
                    413:        i = quant(atoi(), VERT);
                    414:        dfact = 1;
                    415:        getch();
                    416:        if (i >= 0)
                    417:                *pbp++ = MOT | VMOT | i;
                    418:        else
                    419:                *pbp++ = MOT | VMOT | NMOT | -i;
                    420:        return(HX);
                    421: }

unix.superglobalmegacorp.com

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