Annotation of 40BSD/cmd/troff/n6.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

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