Annotation of 41BSD/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     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.