Annotation of 43BSDReno/usr.bin/roff/common_source/n2.c, revision 1.1

1.1     ! root        1: #ifndef lint
        !             2: static char sccsid[] = "@(#)n2.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: #ifdef NROFF
        !            12: extern
        !            13: #include "tw.h"
        !            14: #endif
        !            15: #include "sdef.h"
        !            16: #include <setjmp.h>
        !            17: jmp_buf sjbuf;
        !            18: 
        !            19: /*
        !            20: troff2.c
        !            21: 
        !            22: output, cleanup
        !            23: */
        !            24: 
        !            25: extern struct s *frame, *stk, *nxf;
        !            26: extern filep ip;
        !            27: extern filep offset;
        !            28: extern char *enda;
        !            29: 
        !            30: 
        !            31: extern char obuf[OBUFSZ];
        !            32: extern char *obufp;
        !            33: extern int dilev;
        !            34: extern int eschar;
        !            35: extern int tlss;
        !            36: extern int tflg;
        !            37: extern int ascii;
        !            38: extern int print;
        !            39: extern char trtab[];
        !            40: extern int waitf;
        !            41: extern char ptname[];
        !            42: extern int ptid;
        !            43: extern int em;
        !            44: extern int ds;
        !            45: extern int mflg;
        !            46: extern filep woff;
        !            47: extern int nflush;
        !            48: extern int lgf;
        !            49: extern int app;
        !            50: extern int nfo;
        !            51: extern int donef;
        !            52: extern int *pendw;
        !            53: extern int nofeed;
        !            54: extern int trap;
        !            55: extern struct sgttyb ttys;
        !            56: extern int ttysave;
        !            57: extern int quiet;
        !            58: extern int pendnf;
        !            59: extern int ndone;
        !            60: extern int lead;
        !            61: extern int ralss;
        !            62: extern int paper;
        !            63: extern int gflag;
        !            64: extern char *unlkp;
        !            65: extern char nextf[];
        !            66: extern int pipeflg;
        !            67: extern int ejf;
        !            68: extern int no_out;
        !            69: extern int level;
        !            70: extern int stopmesg;
        !            71: extern int xxx;
        !            72: int toolate;
        !            73: int error;
        !            74: #ifndef NROFF
        !            75: extern int acctf;
        !            76: #endif
        !            77: 
        !            78: pchar(c)
        !            79: int c;
        !            80: {
        !            81:        register i, j;
        !            82: 
        !            83:        if((i=c) & MOT){pchar1(i); return;}
        !            84:        switch(j = i & CMASK){
        !            85:                case 0:
        !            86:                case IMP:
        !            87:                case RIGHT:
        !            88:                case LEFT:
        !            89:                        return;
        !            90:                case HX:
        !            91:                        j = (tlss>>9) | ((i&~0777)>>3);
        !            92:                        if(i & 040000){
        !            93:                                j &= ~(040000>>3);
        !            94:                                if(j > dip->blss)dip->blss = j;
        !            95:                        }else{
        !            96:                                if(j > dip->alss)dip->alss = j;
        !            97:                                ralss = dip->alss;
        !            98:                        }
        !            99:                        tlss = 0;
        !           100:                        return;
        !           101:                case LX:
        !           102:                        tlss = i;
        !           103:                        return;
        !           104:                case PRESC:
        !           105:                        if(dip == &d[0])j = eschar;
        !           106:                default:
        !           107:                        i = (trtab[j] & BMASK) | (i & ~CMASK);
        !           108:        }
        !           109:        pchar1(i);
        !           110: }
        !           111: pchar1(c)
        !           112: int c;
        !           113: {
        !           114:        register i, j, *k;
        !           115:        extern int chtab[];
        !           116: 
        !           117:        j = (i = c) & CMASK;
        !           118:        if(dip != &d[0]){
        !           119:                wbf(i);
        !           120:                dip->op = offset;
        !           121:                return;
        !           122:        }
        !           123:        if(!tflg && !print){
        !           124:                if(j == '\n')dip->alss = dip->blss = 0;
        !           125:                return;
        !           126:        }
        !           127:        if(no_out || (j == FILLER))return;
        !           128: #ifndef NROFF
        !           129:        if(ascii){
        !           130:                if(i & MOT){
        !           131:                        oput(' ');
        !           132:                        return;
        !           133:                }
        !           134:                if(j < 0177){
        !           135:                        oput(i);
        !           136:                        return;
        !           137:                }
        !           138:                switch(j){
        !           139:                        case 0200:
        !           140:                        case 0210:
        !           141:                                oput('-');
        !           142:                                break;
        !           143:                        case 0211:
        !           144:                                oputs("fi");
        !           145:                                break;
        !           146:                        case 0212:
        !           147:                                oputs("fl");
        !           148:                                break;
        !           149:                        case 0213:
        !           150:                                oputs("ff");
        !           151:                                break;
        !           152:                        case 0214:
        !           153:                                oputs("ffi");
        !           154:                                break;
        !           155:                        case 0215:
        !           156:                                oputs("ffl");
        !           157:                                break;
        !           158:                        default:
        !           159:                                for(k=chtab; *++k != j; k++)
        !           160:                                        if(*k == 0)return;
        !           161:                                oput('\\');
        !           162:                                oput('(');
        !           163:                                oput(*--k & BMASK);
        !           164:                                oput(*k >> BYTE);
        !           165:                }
        !           166:        }else
        !           167: #endif
        !           168:        ptout(i);
        !           169: }
        !           170: oput(i)
        !           171: char i;
        !           172: {
        !           173:        *obufp++ = i;
        !           174:        if(obufp == (obuf + OBUFSZ + ascii - 1))flusho();
        !           175: }
        !           176: oputs(i)
        !           177: char *i;
        !           178: {
        !           179:        while(*i != 0)oput(*i++);
        !           180: }
        !           181: flusho(){
        !           182:        if(!ascii)*obufp++ = 0;
        !           183:        if(!ptid){
        !           184:                while((ptid=open(ptname,1)) < 0){
        !           185:                        if(++waitf <=2)prstr("Waiting for Typesetter.\n");
        !           186:                        sleep(15);
        !           187:                }
        !           188:        }
        !           189:        if(no_out == 0){
        !           190:                if (!toolate) {
        !           191:                        toolate++;
        !           192: #ifdef NROFF
        !           193:                        if(t.bset || t.breset){
        !           194:                                if(ttysave == -1) {
        !           195:                                        gtty(1, &ttys);
        !           196:                                        ttysave = ttys.sg_flags;
        !           197:                                }
        !           198:                                ttys.sg_flags &= ~t.breset;
        !           199:                                ttys.sg_flags |= t.bset;
        !           200:                                stty(1, &ttys);
        !           201:                        }
        !           202:                        {
        !           203:                        char *p = t.twinit;
        !           204:                        while (*p++)
        !           205:                                ;
        !           206:                        write(ptid, t.twinit, p-t.twinit-1);
        !           207:                        }
        !           208: #endif
        !           209:                }
        !           210:                toolate += write(ptid, obuf, obufp-obuf);
        !           211:        }
        !           212:        obufp = obuf;
        !           213: }
        !           214: done(x) int x;{
        !           215:        register i;
        !           216: 
        !           217:        error |= x;
        !           218:        level = 0;
        !           219:        app = ds = lgf = 0;
        !           220:        if(i=em){
        !           221:                donef = -1;
        !           222:                em = 0;
        !           223:                if(control(i,0))longjmp(sjbuf,1);
        !           224:        }
        !           225:        if(!nfo)done3(0);
        !           226:        mflg = 0;
        !           227:        dip = &d[0];
        !           228:        if(woff)wbt(0);
        !           229:        if(pendw)getword(1);
        !           230:        pendnf = 0;
        !           231:        if(donef == 1)done1(0);
        !           232:        donef = 1;
        !           233:        ip = 0;
        !           234:        frame = stk;
        !           235:        nxf = frame + 1;
        !           236:        if(!ejf)tbreak();
        !           237:        nflush++;
        !           238:        eject((struct s *)0);
        !           239:        longjmp(sjbuf,1);
        !           240: }
        !           241: done1(x) int x; {
        !           242:        error |= x;
        !           243:        if(v.nl){
        !           244:                trap = 0;
        !           245:                eject((struct s *)0);
        !           246:                longjmp(sjbuf,1);
        !           247:        }
        !           248:        if(nofeed){
        !           249:                ptlead();
        !           250:                flusho();
        !           251:                done3(0);
        !           252:        }else{
        !           253:                if(!gflag)lead += TRAILER;
        !           254:                done2(0);
        !           255:        }
        !           256: }
        !           257: done2(x) int x; {
        !           258:        register i;
        !           259: 
        !           260:        ptlead();
        !           261: #ifndef NROFF
        !           262:        if(!ascii){
        !           263:                oput(T_INIT);
        !           264:                oput(T_STOP);
        !           265:                if(!gflag)for(i=8; i>0; i--)oput(T_PAD);
        !           266:                if(stopmesg)prstr("Troff finished.\n");
        !           267:        }
        !           268: #endif
        !           269:        flusho();
        !           270:        done3(x);
        !           271: }
        !           272: done3(x) int x;{
        !           273:        error |= x;
        !           274:        signal(SIGINT, SIG_IGN);
        !           275:        signal(SIGTERM, SIG_IGN);
        !           276:        unlink(unlkp);
        !           277: #ifdef NROFF
        !           278:        twdone();
        !           279: #endif
        !           280:        if(quiet){
        !           281:                ttys.sg_flags |= ECHO;
        !           282:                stty(0, &ttys);
        !           283:        }
        !           284:        if(ascii)mesg(1);
        !           285: #ifndef NROFF
        !           286:        report();
        !           287: #endif
        !           288:        exit(error);
        !           289: }
        !           290: edone(x) int x;{
        !           291:        frame = stk;
        !           292:        nxf = frame + 1;
        !           293:        ip = 0;
        !           294:        done(x);
        !           295: }
        !           296: #ifndef NROFF
        !           297: report(){
        !           298:        struct {int use; int uid;} a;
        !           299: 
        !           300:        if((ptid != 1) && paper ){
        !           301:                lseek(acctf,0L,2);
        !           302:                a.use = paper;
        !           303:                a.uid = getuid();
        !           304:                write(acctf,(char *)&a,sizeof(a));
        !           305:                close(acctf);
        !           306:        }
        !           307: }
        !           308: #endif
        !           309: #ifdef NROFF
        !           310: casepi(){
        !           311:        register i;
        !           312:        int id[2];
        !           313: 
        !           314:        if(toolate || skip() || !getname() || (pipe(id) == -1) ||
        !           315:           ((i=fork()) == -1)){
        !           316:                prstr("Pipe not created.\n");
        !           317:                return;
        !           318:        }
        !           319:        ptid = id[1];
        !           320:        if(i>0){
        !           321:                close(id[0]);
        !           322:                toolate++;
        !           323:                pipeflg++;
        !           324:                return;
        !           325:        }
        !           326:        close(0);
        !           327:        dup(id[0]);
        !           328:        close(id[1]);
        !           329:        execl(nextf,nextf,0);
        !           330:        prstr("Cannot exec: ");
        !           331:        prstr(nextf);
        !           332:        prstr("\n");
        !           333:        exit(-4);
        !           334: }
        !           335: #endif

unix.superglobalmegacorp.com

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