Annotation of 43BSDTahoe/usr.bin/roff/troff/t10.c, revision 1.1.1.1

1.1       root        1: #ifndef lint
                      2: static char sccsid[] = "@(#)t10.c      4.1     (Berkeley)      82/12/03";
                      3: #endif
                      4: 
                      5: #include "tdef.h"
                      6: extern
                      7: #include "d.h"
                      8: extern
                      9: #include "v.h"
                     10: /*
                     11: troff10.c
                     12: 
                     13: CAT interface
                     14: */
                     15: 
                     16: extern int *olinep;
                     17: extern int oline[];
                     18: extern int *pslp;
                     19: extern int back;
                     20: extern int xpts;
                     21: extern int mpts;
                     22: extern int po;
                     23: extern int xflg;
                     24: extern int line[];
                     25: extern int lss;
                     26: extern int xbitf;
                     27: extern char obuf[];
                     28: extern char *obufp;
                     29: extern int esct;
                     30: extern int trflg;
                     31: extern int cs;
                     32: extern int smnt;
                     33: extern int mfont;
                     34: extern int xfont;
                     35: extern int code;
                     36: extern int mcase;
                     37: extern int esc;
                     38: extern int lead;
                     39: extern int paper;
                     40: extern int cps;
                     41: extern int psflg;
                     42: extern int ptid;
                     43: extern int verm;
                     44: extern int escm;
                     45: extern char pstab[], psctab[];
                     46: extern int dpn;
                     47: extern int ascii;
                     48: int mrail = 0; /*0=LR,1=UR*/
                     49: int mmag = 1; /*0=UM,1=LM*/
                     50: extern int nofeed;
                     51: extern int gflag;
                     52: extern int fontlab[];
                     53: int papflg;
                     54: extern int pfont;
                     55: extern int ppts;
                     56: extern int oldbits;
                     57: extern int bd;
                     58: extern int vflag;
                     59: extern int stopmesg;
                     60: extern int xxx;
                     61: 
                     62: ptinit(){
                     63: 
                     64:        if(ascii || gflag)return;
                     65:        oput(T_INIT);
                     66:        esc = T_IESC;
                     67:        ptesc();
                     68:        esct = 0;
                     69:        esc = po;
                     70:        oput(0140); /*some initial lead*/
                     71: }
                     72: ptout(i)
                     73: int i;
                     74: {
                     75:        register *k, lw, *j;
                     76:        int ds, de, inith, temp, *slp, dv;
                     77:        int psl[16];
                     78: 
                     79:        if((i & CMASK) != '\n'){
                     80:                *olinep++ = i;
                     81:                return;
                     82:        }
                     83:        if(olinep == oline){
                     84:                lead += lss;
                     85:                return;
                     86:        }
                     87:        pslp = psl;
                     88:        *pslp = lw = inith = dv = 0;
                     89:        for(k=oline; k<olinep; k++){
                     90:                trflg++;
                     91:                xbitf = 1;
                     92:                lw += width(*k);
                     93:                if((*k & (MOT | VMOT)) == (MOT | VMOT)){
                     94:                        temp = *k & ~MOTV;
                     95:                        if(*k & NMOT)temp = -temp;
                     96:                        dv += temp;
                     97:                }
                     98:                if(!(*k & MOT) && xflg)for(j=psl; j<=pslp; j++){
                     99:                        if(xpts == *j)break;
                    100:                        if(j == pslp){
                    101:                                *j = xpts;
                    102:                                *++pslp = 0;
                    103:                                break;
                    104:                        }
                    105:                }
                    106:        }
                    107:        if(dv){
                    108:                vflag++;
                    109:                *olinep++ = makem(-dv);
                    110:                vflag = 0;
                    111:        }
                    112:        if(xflg){
                    113:        --pslp;
                    114:                for(j=psl; j<=pslp; j++){
                    115:                        if(*j == mpts){
                    116:                                temp = *j;
                    117:                                *j = *pslp;
                    118:                                *pslp = temp;
                    119:                                break;
                    120:                        }
                    121:                }
                    122:        }
                    123:        for(k=oline; k<olinep; k++){
                    124:                if(!(*k & MOT) || (*k & VMOT))break;
                    125:                *k &= ~MOT;
                    126:                if(*k & NMOT){
                    127:                        *k &= ~NMOT;
                    128:                        *k = -*k;
                    129:                }
                    130:                inith += *k;
                    131:        }
                    132:        lead += dip->blss + lss;
                    133:        dip->blss = 0;
                    134:        slp = k;
                    135: scan:
                    136:        temp = esct - po;
                    137:        if(mpts & DBL)temp -= 55;
                    138:        ds = temp - inith;
                    139:        de = lw - temp;
                    140:        if(de >= ds){
                    141:                back = 0;
                    142:                esc = -ds;
                    143:                for(k=slp; k<olinep; k++)ptout0(*k);
                    144:        }else{
                    145:                back = 1;
                    146:                esc = de;
                    147:                for(k = olinep-1; k>=slp; --k)ptout0(*k);
                    148:        }
                    149:        if(xflg && (--pslp >= psl))goto scan;
                    150:        olinep = oline;
                    151:        lead += dip->alss;
                    152:        dip->alss = 0;
                    153: }
                    154: ptout0(i)
                    155: int i;
                    156: {
                    157:        register j, k, w;
                    158:        int z;
                    159: 
                    160:        if(i & MOT){
                    161:                j = i & ~MOTV;
                    162:                if(i & NMOT)j = -j;
                    163:                if(back)j = -j;
                    164:                if(i & VMOT)lead += j;
                    165:                else esc += j;
                    166:                return;
                    167:        }
                    168:        xbitf = 2;
                    169:        if((i>>BYTE) == oldbits){
                    170:                xfont = pfont;
                    171:                xpts = ppts;
                    172:                xbitf = 0;
                    173:        }else xbits(i);
                    174:        if((k = (i & CMASK)) < 040){
                    175:                return;
                    176:        }
                    177:        w = getcw(k-32);
                    178:        if(cs){
                    179:                if(bd)w += bd - 1;
                    180:                j = (cs-w)/2;
                    181:                w = cs - j;
                    182:                if(bd)w -= bd - 1;
                    183:        }else j = 0;
                    184:        if(i & ZBIT){
                    185:                if(cs)w = -j; else w = 0;
                    186:                z = 1;
                    187:        }else z = 0;
                    188:        if(back){
                    189:                k = j;
                    190:                j = -w;
                    191:                w = -k;
                    192:        }
                    193:        esc += j;
                    194:        if((!xflg || (xpts == *pslp)) && (code & 077)){
                    195:                if(code & 0200){
                    196:                        if(smnt)xfont = smnt -1;
                    197:                        else goto p1;
                    198:                }
                    199:                if((k=(code>>6)&01)^mcase)oput((mcase=k)+0105);
                    200:                if(xfont != mfont){
                    201:                        mfont = xfont;
                    202:                        if(mrail != (xfont&01))
                    203:                                oput(0101 + (mrail=xfont&01));
                    204:                        if(mmag != (xfont<2))
                    205:                                oput(0103 + (mmag=(xfont<2)));
                    206:                }
                    207:                if(xpts != mpts)ptps();
                    208:                if(lead)ptlead();
                    209:                if(esc)ptesc();
                    210: /*
                    211:                oput(code & 077);
                    212: */
                    213:                *obufp++ = code & 077;
                    214:                if(obufp == (obuf + OBUFSZ + ascii - 1))flusho();
                    215:                if(bd){
                    216:                        bd -= 1;
                    217:                        if(back && !z)bd = -bd;
                    218:                        if(esc += bd)ptesc();
                    219:                        oput(code & 077);
                    220:                        if(z)esc -= bd;
                    221:                }
                    222:        }else if(bd && !z){
                    223:                bd -= 1;
                    224:                if(back)bd = -bd;
                    225:                esc += bd;
                    226:        }
                    227: p1:
                    228:        esc += w;
                    229:        return;
                    230: }
                    231: ptps(){
                    232:        register i, j, k;
                    233: 
                    234:        if(psflg)return;
                    235:        if(cps){
                    236:                psflg++;
                    237:                i = findps(cps);
                    238:        }else i = xpts;
                    239:        for(j=0; (i&077) > (k = pstab[j]);j++)if(!k){k=pstab[--j];break;}
                    240:        j = psctab[j];
                    241:        oput((j & ~0200) | 0120);
                    242:        if((!(mpts & DBL))^(!(j & 0200))){
                    243:                if(j & 0200)k = 55;
                    244:                        else k = -55;
                    245:                esc += k;
                    246:        }
                    247:        mpts = i;
                    248: }
                    249: ptlead(){
                    250:        register i, k;
                    251: 
                    252:        if(k = lead < 0)lead = -lead;
                    253:        if(k^verm)oput(0112 + ((verm=k)<<1));
                    254:        if(((k=lead)%3) == 2)k++;
                    255:        k /= 3;
                    256:        while(k > 0){
                    257:                if((i=31) > k)i = k;
                    258:                if(verm)paper -= i;
                    259:                        else paper += i;
                    260:                oput(((~i) & 037) | 0140);
                    261:                if((paper > (11*144*15)) && !papflg && ptid != 1){
                    262:                        prstr("Excessive paper use.\n");
                    263:                        papflg++;
                    264:                        if(ptid != 1){
                    265:                                lead = 0;
                    266:                                done2(0200);
                    267:                        }
                    268:                }
                    269:                k -= i;
                    270:        }
                    271:        lead = 0;
                    272: }
                    273: ptesc(){
                    274:        register i, j, k;
                    275: 
                    276:        if(k = esc < 0)esc = -esc;
                    277:        if(k^escm)oput(0107 + (escm=k));
                    278:        k = esc;
                    279:        while(k > 0){
                    280:                if((i=127) > k)i = k;
                    281:                if(((j = (esct + i*(1-2*escm))) > (46*72+18-T_IESC)) ||
                    282:                   (j < 0))break;
                    283: /*
                    284:                oput(~i);
                    285: */
                    286:                *obufp++ = ~i;
                    287:                if(obufp == (obuf + OBUFSZ + ascii - 1))flusho();
                    288:                esct = j;
                    289:                k -= i;
                    290:        }
                    291:        esc = 0;
                    292: }
                    293: dostop(){
                    294:        register i;
                    295: 
                    296:        if(ascii)return;
                    297:        if(!nofeed && !gflag)lead += TRAILER;
                    298:        ptlead();
                    299:        flusho();
                    300:        oput(T_INIT);
                    301:        oput(T_STOP);
                    302:        if(gflag){
                    303:                oput('f');
                    304:                for(i=0; i<4; i++){
                    305:                        oput(fontlab[i] & BMASK);
                    306:                        oput((fontlab[i]>>BYTE) & BMASK);
                    307:                }
                    308:        }else for(i=8; i>0; i--)oput(T_PAD);
                    309:        flusho();
                    310:        if(stopmesg)prstr("Pages finished.\n");
                    311:        mcase = mpts = mfont = mrail = verm = escm = 0;
                    312:        mmag = 1;
                    313:        report();
                    314:        paper = 0;
                    315:        esc = T_IESC;
                    316:        ptesc();
                    317:        esct = 0;
                    318:        esc = po;
                    319: }

unix.superglobalmegacorp.com

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