Annotation of 42BSD/usr.bin/nroff/n10.c, revision 1.1.1.1

1.1       root        1: #ifndef lint
                      2: static char sccsid[] = "@(#)n10.c      4.1 6/7/82";
                      3: #endif lint
                      4: 
                      5: #include "tdef.h"
                      6: #include <sgtty.h>
                      7: extern
                      8: #include "d.h"
                      9: extern
                     10: #include "v.h"
                     11: extern
                     12: #include "tw.h"
                     13: /*
                     14: nroff10.c
                     15: 
                     16: Device interfaces
                     17: */
                     18: 
                     19: extern int lss;
                     20: extern char obuf[];
                     21: extern char *obufp;
                     22: extern int xfont;
                     23: extern int esc;
                     24: extern int lead;
                     25: extern int oline[];
                     26: extern int *olinep;
                     27: extern int ulfont;
                     28: extern int esct;
                     29: extern int sps;
                     30: extern int ics;
                     31: extern int ttysave;
                     32: extern struct sgttyb ttys;
                     33: extern char termtab[];
                     34: extern int ptid;
                     35: extern int waitf;
                     36: extern int pipeflg;
                     37: extern int eqflg;
                     38: extern int hflg;
                     39: extern int tabtab[];
                     40: extern int ascii;
                     41: extern int xxx;
                     42: int dtab;
                     43: int bdmode;
                     44: int plotmode;
                     45: 
                     46: ptinit(){
                     47:        register i, j;
                     48:        register char **p;
                     49:        char *q;
                     50:        int x[8];
                     51:        extern char *setbrk();
                     52: 
                     53:        if(((i=open(termtab,0)) < 0) && (i=open("/usr/lib/term/tablpr",0)) < 0){
                     54:                prstr("Cannot open ");
                     55:                prstr(termtab);
                     56:                prstr("\n");
                     57:                exit(-1);
                     58:        }
                     59:        read(i,(char *)x,8*sizeof(int));
                     60:        read(i,(char *)&t.bset,j = sizeof(int)*((int *)&t.zzz - &t.bset));
                     61:        x[2] -= j;
                     62:        q = setbrk(x[2]);
                     63:        lseek(i,(long)t.twinit+8*sizeof(int),0);
                     64:        i = read(i,q,x[2]);
                     65:        j = q - t.twinit;
                     66:        for(p = &t.twinit; p < &t.zzz; p++){
                     67:                if(*p)*p += j;else *p = "";
                     68:        }
                     69:        sps = EM;
                     70:        ics = EM*2;
                     71:        dtab = 8 * t.Em;
                     72:        for(i=0; i<16; i++)tabtab[i] = dtab * (i+1);
                     73:        if(eqflg)t.Adj = t.Hor;
                     74: }
                     75: twdone(){
                     76:        obufp = obuf;
                     77:        oputs(t.twrest);
                     78:        flusho();
                     79:        if(pipeflg){
                     80:                close(ptid);
                     81:                wait(&waitf);
                     82:        }
                     83:        if(ttysave != -1) {
                     84:                ttys.sg_flags = ttysave;
                     85:                stty(1, &ttys);
                     86:        }
                     87: }
                     88: ptout(i)
                     89: int i;
                     90: {
                     91:        *olinep++ = i;
                     92:        if(olinep >= &oline[LNSIZE])olinep--;
                     93:        if((i&CMASK) != '\n')return;
                     94:        olinep--;
                     95:        lead += dip->blss + lss - t.Newline;
                     96:        dip->blss = 0;
                     97:        esct = esc = 0;
                     98:        if(olinep>oline){
                     99:                move();
                    100:                ptout1();
                    101:                oputs(t.twnl);
                    102:        }else{
                    103:                lead += t.Newline;
                    104:                move();
                    105:        }
                    106:        lead += dip->alss;
                    107:        dip->alss = 0;
                    108:        olinep = oline;
                    109: }
                    110: ptout1()
                    111: {
                    112:        register i, k;
                    113:        register char *codep;
                    114:        extern char *plot();
                    115:        int *q, w, j, phyw;
                    116: 
                    117:        for(q=oline; q<olinep; q++){
                    118:        if((i = *q) & MOT){
                    119:                j = i & ~MOTV;
                    120:                if(i & NMOT)j = -j;
                    121:                if(i & VMOT)lead += j;
                    122:                else esc += j;
                    123:                continue;
                    124:        }
                    125:        if((k = (i & CMASK)) <= 040){
                    126:                switch(k){
                    127:                        case ' ': /*space*/
                    128:                                esc += t.Char;
                    129:                                break;
                    130:                }
                    131:                continue;
                    132:        }
                    133:        codep = t.codetab[k-32];
                    134:        w = t.Char * (*codep++ & 0177);
                    135:        phyw = w;
                    136:        if(i&ZBIT)w = 0;
                    137:        if(*codep && (esc || lead))move();
                    138:        esct += w;
                    139:        if(i&074000)xfont = (i>>9) & 03;
                    140:        if(*t.bdon & 0377){
                    141:                if(!bdmode && (xfont == 2)){
                    142:                        oputs(t.bdon);
                    143:                        bdmode++;
                    144:                }
                    145:                if(bdmode && (xfont != 2)){
                    146:                        oputs(t.bdoff);
                    147:                        bdmode = 0;
                    148:                }
                    149:        }
                    150:        if(xfont == ulfont){
                    151:                for(k=w/t.Char;k>0;k--)oput('_');
                    152:                for(k=w/t.Char;k>0;k--)oput('\b');
                    153:        }
                    154:        while(*codep != 0){
                    155:                if(*codep & 0200){
                    156:                        codep = plot(codep);
                    157:                        oputs(t.plotoff);
                    158:                        oput(' ');
                    159:                }else{
                    160:                        if(plotmode)oputs(t.plotoff);
                    161:                        *obufp++ = *codep++;
                    162:                        if(obufp == (obuf + OBUFSZ + ascii - 1))flusho();
                    163: /*                     oput(*codep++);*/
                    164:                }
                    165:        }
                    166:        if(!w)for(k=phyw/t.Char;k>0;k--)oput('\b');
                    167:        }
                    168: }
                    169: char *plot(x)
                    170: char *x;
                    171: {
                    172:        register int i;
                    173:        register char *j, *k;
                    174: 
                    175:        if(!plotmode)oputs(t.ploton);
                    176:        k = x;
                    177:        if((*k & 0377) == 0200)k++;
                    178:        for(; *k; k++){
                    179:                if(*k & 0200){
                    180:                        if(*k & 0100){
                    181:                                if(*k & 040)j = t.up; else j = t.down;
                    182:                        }else{
                    183:                                if(*k & 040)j = t.left; else j = t.right;
                    184:                        }
                    185:                        if(!(i = *k & 037))return(++k);
                    186:                        while(i--)oputs(j);
                    187:                }else oput(*k);
                    188:        }
                    189:        return(k);
                    190: }
                    191: move(){
                    192:        register k;
                    193:        register char *i, *j;
                    194:        char *p, *q;
                    195:        int iesct, dt;
                    196: 
                    197:        iesct = esct;
                    198:        if(esct += esc)i = "\0"; else i = "\n\0";
                    199:        j = t.hlf;
                    200:        p = t.right;
                    201:        q = t.down;
                    202:        if(lead){
                    203:                if(lead < 0){
                    204:                        lead = -lead;
                    205:                        i = t.flr;
                    206:                /*      if(!esct)i = t.flr; else i = "\0";*/
                    207:                        j = t.hlr;
                    208:                        q = t.up;
                    209:                }
                    210:                if(*i & 0377){
                    211:                        k = lead/t.Newline;
                    212:                        lead = lead%t.Newline;
                    213:                        while(k--)oputs(i);
                    214:                }
                    215:                if(*j & 0377){
                    216:                        k = lead/t.Halfline;
                    217:                        lead = lead%t.Halfline;
                    218:                        while(k--)oputs(j);
                    219:                }
                    220:                else { /* no half-line forward, not at line begining */
                    221:                        k = lead/t.Newline;
                    222:                        lead = lead%t.Newline;
                    223:                        if (k>0) esc=esct;
                    224:                        i = "\n";
                    225:                        while (k--) oputs(i);
                    226:                }
                    227:        }
                    228:        if(esc){
                    229:                if(esc < 0){
                    230:                        esc = -esc;
                    231:                        j = "\b";
                    232:                        p = t.left;
                    233:                }else{
                    234:                        j = " ";
                    235:                        if(hflg)while((dt = dtab - (iesct%dtab)) <= esc){
                    236:                                if(dt%t.Em)break;
                    237:                                oput(TAB);
                    238:                                esc -= dt;
                    239:                                iesct += dt;
                    240:                        }
                    241:                }
                    242:                k = esc/t.Em;
                    243:                esc = esc%t.Em;
                    244:                while(k--)oputs(j);
                    245:        }
                    246:        if((*t.ploton & 0377) && (esc || lead)){
                    247:                if(!plotmode)oputs(t.ploton);
                    248:                esc /= t.Hor;
                    249:                lead /= t.Vert;
                    250:                while(esc--)oputs(p);
                    251:                while(lead--)oputs(q);
                    252:                oputs(t.plotoff);
                    253:        }
                    254:        esc = lead = 0;
                    255: }
                    256: ptlead(){move();}
                    257: dostop(){
                    258:        char junk;
                    259: 
                    260:        flusho();
                    261:        read(2,&junk,1);
                    262: }

unix.superglobalmegacorp.com

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