Annotation of researchv10no/cmd/troff/ancient.nroff/n6.c, revision 1.1

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

unix.superglobalmegacorp.com

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