Annotation of 43BSD/usr.bin/nroff/n6.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

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