Annotation of 42BSD/usr.bin/nroff/n10.c, revision 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.