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

unix.superglobalmegacorp.com

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