📄 n2.c
字号:
#ifndef lintstatic char sccsid[] = "@(#)n2.c 4.1 6/7/82";#endif lint#include "tdef.h"#include <sgtty.h>extern#include "d.h"extern#include "v.h"#ifdef NROFFextern#include "tw.h"#endif#include "sdef.h"#include <setjmp.h>jmp_buf sjbuf;/*troff2.coutput, cleanup*/extern struct s *frame, *stk, *nxf;extern filep ip;extern filep offset;extern char *enda;extern char obuf[OBUFSZ];extern char *obufp;extern int dilev;extern int eschar;extern int tlss;extern int tflg;extern int ascii;extern int print;extern char trtab[];extern int waitf;extern char ptname[];extern int ptid;extern int em;extern int ds;extern int mflg;extern filep woff;extern int nflush;extern int lgf;extern int app;extern int nfo;extern int donef;extern int *pendw;extern int nofeed;extern int trap;extern struct sgttyb ttys;extern int ttysave;extern int quiet;extern int pendnf;extern int ndone;extern int lead;extern int ralss;extern int paper;extern int gflag;extern char *unlkp;extern char nextf[];extern int pipeflg;extern int ejf;extern int no_out;extern int level;extern int stopmesg;extern int xxx;int toolate;int error;#ifndef NROFFextern int acctf;#endifpchar(c)int c;{ register i, j; if((i=c) & MOT){pchar1(i); return;} switch(j = i & CMASK){ case 0: case IMP: case RIGHT: case LEFT: return; case HX: j = (tlss>>9) | ((i&~0777)>>3); if(i & 040000){ j &= ~(040000>>3); if(j > dip->blss)dip->blss = j; }else{ if(j > dip->alss)dip->alss = j; ralss = dip->alss; } tlss = 0; return; case LX: tlss = i; return; case PRESC: if(dip == &d[0])j = eschar; default: i = (trtab[j] & BMASK) | (i & ~CMASK); } pchar1(i);}pchar1(c)int c;{ register i, j, *k; extern int chtab[]; j = (i = c) & CMASK; if(dip != &d[0]){ wbf(i); dip->op = offset; return; } if(!tflg && !print){ if(j == '\n')dip->alss = dip->blss = 0; return; } if(no_out || (j == FILLER))return;#ifndef NROFF if(ascii){ if(i & MOT){ oput(' '); return; } if(j < 0177){ oput(i); return; } switch(j){ case 0200: case 0210: oput('-'); break; case 0211: oputs("fi"); break; case 0212: oputs("fl"); break; case 0213: oputs("ff"); break; case 0214: oputs("ffi"); break; case 0215: oputs("ffl"); break; default: for(k=chtab; *++k != j; k++) if(*k == 0)return; oput('\\'); oput('('); oput(*--k & BMASK); oput(*k >> BYTE); } }else#endif ptout(i);}oput(i)char i;{ *obufp++ = i; if(obufp == (obuf + OBUFSZ + ascii - 1))flusho();}oputs(i)char *i;{ while(*i != 0)oput(*i++);}flusho(){ if(!ascii)*obufp++ = 0; if(!ptid){ while((ptid=open(ptname,1)) < 0){ if(++waitf <=2)prstr("Waiting for Typesetter.\n"); sleep(15); } } if(no_out == 0){ if (!toolate) { toolate++;#ifdef NROFF if(t.bset || t.breset){ if(ttysave == -1) { gtty(1, &ttys); ttysave = ttys.sg_flags; } ttys.sg_flags &= ~t.breset; ttys.sg_flags |= t.bset; stty(1, &ttys); } { char *p = t.twinit; while (*p++) ; write(ptid, t.twinit, p-t.twinit-1); }#endif } toolate += write(ptid, obuf, obufp-obuf); } obufp = obuf;}done(x) int x;{ register i; error |= x; level = 0; app = ds = lgf = 0; if(i=em){ donef = -1; em = 0; if(control(i,0))longjmp(sjbuf,1); } if(!nfo)done3(0); mflg = 0; dip = &d[0]; if(woff)wbt(0); if(pendw)getword(1); pendnf = 0; if(donef == 1)done1(0); donef = 1; ip = 0; frame = stk; nxf = frame + 1; if(!ejf)tbreak(); nflush++; eject((struct s *)0); longjmp(sjbuf,1);}done1(x) int x; { error |= x; if(v.nl){ trap = 0; eject((struct s *)0); longjmp(sjbuf,1); } if(nofeed){ ptlead(); flusho(); done3(0); }else{ if(!gflag)lead += TRAILER; done2(0); }}done2(x) int x; { register i; ptlead();#ifndef NROFF if(!ascii){ oput(T_INIT); oput(T_STOP); if(!gflag)for(i=8; i>0; i--)oput(T_PAD); if(stopmesg)prstr("Troff finished.\n"); }#endif flusho(); done3(x);}done3(x) int x;{ error |= x; signal(SIGINT, SIG_IGN); signal(SIGTERM, SIG_IGN); unlink(unlkp);#ifdef NROFF twdone();#endif if(quiet){ ttys.sg_flags |= ECHO; stty(0, &ttys); } if(ascii)mesg(1);#ifndef NROFF report();#endif exit(error);}edone(x) int x;{ frame = stk; nxf = frame + 1; ip = 0; done(x);}#ifndef NROFFreport(){ struct {int use; int uid;} a; if((ptid != 1) && paper ){ lseek(acctf,0L,2); a.use = paper; a.uid = getuid(); write(acctf,(char *)&a,sizeof(a)); close(acctf); }}#endif#ifdef NROFFcasepi(){ register i; int id[2]; if(toolate || skip() || !getname() || (pipe(id) == -1) || ((i=fork()) == -1)){ prstr("Pipe not created.\n"); return; } ptid = id[1]; if(i>0){ close(id[0]); toolate++; pipeflg++; return; } close(0); dup(id[0]); close(id[1]); execl(nextf,nextf,0); prstr("Cannot exec: "); prstr(nextf); prstr("\n"); exit(-4);}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -