Annotation of researchv10no/cmd/troff/ancient.nroff/n6.c, revision 1.1.1.1

1.1       root        1: #include "tdef.hd"
                      2: #include "strs.hd"
                      3: #ifdef NROFF
                      4: #include "tw.hd"
                      5: #endif
                      6: 
                      7: /*
                      8: troff6.c
                      9: 
                     10: width functions, sizes and fonts
                     11: */
                     12: 
                     13: #ifndef INCORE
                     14: extern struct envblock eblock;
                     15: #else
                     16: extern struct envblock eblock[NEV];
                     17: extern int ev;
                     18: #endif
                     19: extern struct ttable t;
                     20: extern struct datablock dblock;
                     21: extern struct tmpfaddr ip;
                     22: 
                     23: extern int Hipb;
                     24: extern int tch[];
                     25: extern int *cstk[], cstkl;
                     26: extern int ch_CMASK;
                     27: extern long atoi0();
                     28: int sbold = 0;
                     29: int bdtab[4] = {0, 0, 3, 0};
                     30: extern int eschar;
                     31: extern int widthp;
                     32: extern int xfont;
                     33: extern int smnt;
                     34: extern int setwdf;
                     35: extern int nonumb;
                     36: extern int noscale;
                     37: extern int nlflg;
                     38: extern int nform;
                     39: extern int dfact;
                     40: extern int dfactd;
                     41: extern int vflag;
                     42: extern int level;
                     43: extern int ch;
                     44: extern int res;
                     45: int fontlab[] = {'R','I','B','S',0};
                     46: width(c)
                     47: int c;
                     48: {
                     49:        register i;
                     50: 
                     51:        if(c & MOT){
                     52:                if (c & VMOT) return (0);
                     53:                i = c & ~MOTV;
                     54:                return ((c & NMOT) ? -i : i);
                     55:        }
                     56:        if((i = (c & CMASK)) == 010) return (-widthp);
                     57:        if(i == PRESC)i = eschar;
                     58:        if((i == ohc) || (i >= 0370) || (c & ZBIT)) return (0);
                     59:        i = trtab[i] & BMASK;
                     60:        if(i < 040) return (0);
                     61:        if (t.codetab[i-32] == 0) return (0);
                     62:        return (widthp = (*(t.codetab[i-32]) & 0177) * t.Char);
                     63: }
                     64: setch(){
                     65:        register i,*j;
                     66:        extern int chtab[];
                     67: 
                     68:        if((i = getrq()) == 0)return(0);
                     69:        for(j=chtab;*j != i;j++)if(*(j++) == 0)return(0);
                     70:        return (*(++j) | chbits);
                     71: }
                     72: find(i,j)
                     73: int i,j[];
                     74: {
                     75:        register k;
                     76: 
                     77:        if(((k = i-'0') >= 1) && (k <= 4) && (k != smnt))return(--k);
                     78:        for(k=0; j[k] != i; k++)if(j[k] == 0)return(-1);
                     79:        return(k);
                     80: }
                     81: mchbits(){
                     82:        chbits = (((pts)<<2) | font) << (BYTE + 1);
                     83:        sps = width(' ' | chbits);
                     84: }
                     85: setps(){
                     86:        register i,j;
                     87: 
                     88:        if((((i=getch() & CMASK) == '+')  || (i == '-')) &&
                     89:          (((j=(ch = getch() & CMASK) - '0') >= 0) && (j <= 9))){
                     90:                ch = 0;
                     91:                return;
                     92:        }
                     93:        if((i -= '0') == 0){
                     94:                return;
                     95:        }
                     96:        if((i > 0) && (i <= 9)){
                     97:                if((i <= 3) &&
                     98:                  ((j=(ch = getch() & CMASK) - '0') >= 0) && (j <= 9)){
                     99:                        i = 10*i +j;
                    100:                        ch = 0;
                    101:                }
                    102:        }
                    103: }
                    104: caseft(){
                    105:        skip();
                    106:        setfont(1);
                    107: }
                    108: setfont(a)
                    109: int a;
                    110: {
                    111:        register i,j;
                    112: 
                    113:        if(a)i = getrq();
                    114:                else i = getsn();
                    115:        if(!i || (i == 'P'))
                    116:                j = font1;
                    117:            else if ((i == 'S') || ((j = find(i,fontlab)) == -1))
                    118:                        return;
                    119:        font1 = font;
                    120:        font = j;
                    121:        if (font == 1) Hipb = -2;       /* mark italic (not cu) to gettch */
                    122:            else if (Hipb == -2)        /* clear Hipb */
                    123:                        Hipb = -1;
                    124:        mchbits();
                    125: }
                    126: setwd(){
                    127:        register i, base, wid;
                    128:        int delim, em, k;
                    129:        int savlevel, savhp, savfont, savfont1;
                    130: 
                    131:        base = v_st = v_sb = wid = v_ct = 0;
                    132:        if (getch() && ((delim = ch_CMASK) & MOT)) return;
                    133:        savhp = v_hp;
                    134:        savlevel = level;
                    135:        v_hp = level = 0;
                    136:        savfont = font;
                    137:        savfont1 = font1;
                    138:        setwdf++;
                    139:        while ((i = getch()) && (ch_CMASK != delim) && !nlflg)  {
                    140:                wid += width(i);
                    141:                if(!(i & MOT)){
                    142:                        em = 2*t.Halfline;
                    143:                }else if(i & VMOT){
                    144:                        k = i & ~MOTV;
                    145:                        if(i & NMOT)k = -k;
                    146:                        base -= k;
                    147:                        em = 0;
                    148:                }else continue;
                    149:                if(base < v_sb)v_sb = base;
                    150:                if((k=base + em) > v_st)v_st = k;
                    151:        }
                    152:        nform = 0;
                    153:        setn1(wid);
                    154:        v_hp = savhp;
                    155:        level = savlevel;
                    156:        font = savfont;
                    157:        font1 = savfont1;
                    158:        mchbits();
                    159:        setwdf = 0;
                    160: }
                    161: mot(){
                    162:        register i, j;
                    163: 
                    164:        j = HOR;
                    165:        getch(); /*eat delim*/
                    166:        if(i = atoi()){
                    167:                if(vflag)j = VERT;
                    168:                i = makem(quant(i,j));
                    169:        }
                    170:        getch();
                    171:        vflag = 0;
                    172:        dfact = 1;
                    173:        return(i);
                    174: }
                    175: sethl(k)
                    176: int k;
                    177: {
                    178:        register i;
                    179: 
                    180:        i = t.Halfline;
                    181:        if(k == 'u')i = -i;
                    182:        else if(k == 'r')i = -2*i;
                    183:        vflag++;
                    184:        i = makem(i);
                    185:        vflag = 0;
                    186:        return(i);
                    187: }
                    188: makem(i)
                    189: int i;
                    190: {
                    191:        register j;
                    192: 
                    193:        if((j = i) < 0)j = -j;
                    194:        j = (j & ~MOTV) | MOT;
                    195:        if(i < 0)j |= NMOT;
                    196:        if(vflag)j |= VMOT;
                    197:        return(j);
                    198: }
                    199: casefp(){
                    200:        register i, j;
                    201: 
                    202:        skip();
                    203:        if(((i = (getch() & CMASK) - '0' -1) < 0) || (i >3))return;
                    204:        if(skip() || !(j = getrq()))return;
                    205:        fontlab[i] = j;
                    206: }
                    207: casevs(){
                    208:        register i;
                    209: 
                    210:        skip();
                    211:        vflag++;
                    212:        dfact = INCH; /*default scaling is points!*/
                    213:        dfactd = 72;
                    214:        res = VERT;
                    215:        i = inumb(&lss);
                    216:        if(nonumb)i = lss1;
                    217:        if(i < VERT)i = VERT;
                    218:        lss1 = lss;
                    219:        lss = i;
                    220: }
                    221: xlss(){
                    222:        register i, j;
                    223: 
                    224:        getch();
                    225:        dfact = lss;
                    226:        i = quant(atoi(),VERT);
                    227:        dfact = 1;
                    228:        getch();
                    229:        if((j = i) < 0)j = -j;
                    230:        setch0(((j & 03700)<<3) | HX);
                    231:        if(i < 0) setch0(tch[0] | 040000);
                    232:        return(((j & 077)<<9) | LX);
                    233: }
                    234: casebd()
                    235:                /* this code for bold overstrike courtesy of cb btl */
                    236: {
                    237:        register i, j, k;
                    238: 
                    239:        k = 0;
                    240: bd0:
                    241:        if (skip() || !(i = getrq()) ||
                    242:            ((j = find(i,fontlab)) == -1)) {
                    243:                if (k) goto bd1;
                    244:                  else return;  }
                    245:        if (j == (smnt - 1)) {
                    246:            k = smnt;
                    247:            goto bd0;   }
                    248:        if (k) {
                    249:            sbold = j + 1;
                    250:            j = k - 1;  }
                    251: bd1:
                    252:        skip();
                    253:        noscale++;
                    254:        k = atoi();
                    255:        bdtab[j] = ((k < 0) || (k > 50)) ? 0 : k;
                    256:        noscale = 0;
                    257: }
                    258: caseps(){}
                    259: caselg(){}
                    260: casecs(){}
                    261: casess(){}

unix.superglobalmegacorp.com

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