Annotation of 3BSD/cmd/troff/n6.c, revision 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)) == 010){
        !            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.