📄 n1.c
字号:
}getch(){ register int i, j, k; level++;g0: if(ch){ if(((i = ch) & CMASK) == '\n')nlflg++; ch = 0; level--; return(i); } if(nlflg){ level--; return('\n'); } if((k = (i = getch0()) & CMASK) != ESC){ if(i & MOT)goto g2; if(k == FLSS){ copyf++; raw++; i = getch0(); if(!fi)flss = i; copyf--; raw--; goto g0; } if(k == RPT){ setrpt(); goto g0; } if(!copyf){ if((k == 'f') && lg && !lgf){ i = getlg(i); goto g2; } if((k == fc) || (k == tabch) || (k == ldrch)){ if((i=setfield(k)) == 0)goto g0; else goto g2; } if(k == 010){ i = makem(-width(' ' | chbits)); goto g2; } } goto g2; } k = (j = getch0()) & CMASK; if(j & MOT){ i = j; goto g2; }/* if(k == tdelim){ i = TDELIM; tdelim = IMP; goto g2; }*/ switch(k){ case '\n': /*concealed newline*/ goto g0; case 'n': /*number register*/ setn(); goto g0; case '*': /*string indicator*/ setstr(); goto g0; case '$': /*argument indicator*/ seta(); goto g0; case '{': /*LEFT*/ i = LEFT; goto gx; case '}': /*RIGHT*/ i = RIGHT; goto gx; case '"': /*comment*/ while(((i=getch0()) & CMASK ) != '\n'); goto g2; case ESC: /*double backslash*/ i = eschar; goto gx; case 'e': /*printable version of current eschar*/ i = PRESC; goto gx; case ' ': /*unpaddable space*/ i = UNPAD; goto gx; case '|': /*narrow space*/ i = NARSP; goto gx; case '^': /*half of narrow space*/ i = HNSP; goto gx; case '\'': /*\(aa*/ i = 0222; goto gx; case '`': /*\(ga*/ i = 0223; goto gx; case '_': /*\(ul*/ i = 0224; goto gx; case '-': /*current font minus*/ i = 0210; goto gx; case '&': /*filler*/ i = FILLER; goto gx; case 'c': /*to be continued*/ i = CONT; goto gx; case ':': /*lem's char*/ i = COLON; goto gx; case '!': /*transparent indicator*/ i = XPAR; goto gx; case 't': /*tab*/ i = '\t'; goto g2; case 'a': /*leader (SOH)*/ i = LEADER; goto g2; case '%': /*ohc*/ i = OHC; goto g2; case '.': /*.*/ i = '.'; gx: i = (j & ~CMASK) | i; goto g2; } if(!copyf) switch(k){ case 'p': /*spread*/ spread++; goto g0; case '(': /*special char name*/ if((i=setch()) == 0)goto g0; break; case 's': /*size indicator*/ setps(); goto g0; case 'f': /*font indicator*/ setfont(0); goto g0; case 'w': /*width function*/ setwd(); goto g0; case 'v': /*vert mot*/ if(i = vmot())break; goto g0; case 'h': /*horiz mot*/ if(i = hmot())break; goto g0; case 'z': /*zero with char*/ i = setz(); break; case 'l': /*hor line*/ setline(); goto g0; case 'L': /*vert line*/ setvline(); goto g0; case 'b': /*bracket*/ setbra(); goto g0; case 'o': /*overstrike*/ setov(); goto g0; case 'k': /*mark hor place*/ if((i=findr(getsn())) == -1)goto g0; vlist[i] = v.hp = sumhp(); /* XXX */ goto g0; case 'j': /*mark output hor place*/ if(!(i=getach()))goto g0; i = (i<<BYTE) | JREG; break; case '0': /*number space*/ i = makem(width('0' | chbits)); break; case 'x': /*extra line space*/ if(i = xlss())break; goto g0; case 'u': /*half em up*/ case 'r': /*full em up*/ case 'd': /*half em down*/ i = sethl(k); break; default: i = j; } else{ ch0 = j; i = eschar; }g2: if((i & CMASK) == '\n'){ nlflg++; v.hp = 0; pinchar = inchar; /* XXX */ if(ip == 0)v.cd++; } if(!--level){ /* j = width(i); */ /* v.hp += j; */ /* cwidth = j; */ if (pinchar >= inchar + LNSIZE) { /* XXX */ inchar[0] = makem(sumhp()); pinchar = &inchar[1]; } *pinchar++ = i; /* XXX */ } return(i);}sumhp() /* XXX - add up widths in inchar array */{ register int n; register int *p; n = 0; for (p = inchar; p < pinchar; p++) n += width(*p); return(n);}char ifilt[32] = {0,001,002,003,0,005,006,007,010,011,012};getch0(){ register int i, j; if(ch0){i=ch0; ch0=0; return(i);} if(nchar){nchar--; return(rchar);}again: if(cp){ if((i = *cp++) == 0){ cp = 0; goto again; } }else if(ap){ if((i = *ap++) == 0){ ap = 0; goto again; } }else if(ip){ if(ip == -1)i = rdtty(); else i = rbf(); }else{ if(donef)done(0); if(nx || ((ibufp >= eibuf) && (ibufp != (char *)MAXPTR))){ if(nfo)goto g1; g0: if(nextfile()){ if(ip)goto again; if(ibufp < eibuf)goto g2; } g1: nx = 0; if((j=read(ifile,ibuf,IBUFSZ)) <= 0)goto g0; ibufp = ibuf; eibuf = ibuf + j; if(ip)goto again; } g2: i = *ibufp++ & 0177; ioff++; if(i >= 040)goto g4; else i = ifilt[i]; } if(raw)return(i); if((j = i & CMASK) == IMP)goto again; if((i == 0) && !init)goto again;g4: if((copyf == 0) && ((i & ~BMASK) == 0) && ((i & CMASK) < 0370))#ifndef NROFF if(spbits && (i>31) && ((codetab[i-32] & 0200))) i |= spbits; else#endif i |= chbits; if((i & CMASK) == eschar)i = (i & ~CMASK) | ESC; return(i);}nextfile(){ register char *p;n0: if(ifile)close(ifile); if(nx){ p = nextf; if(*p != 0)goto n1; } if(ifi > 0){ if(popf())goto n0; /*popf error*/ return(1); /*popf ok*/ } if(rargc-- <= 0)goto n2; p = (argp++)[0];n1: if((p[0] == '-') && (p[1] == 0)){ ifile = 0; }else if((ifile=open(p,0)) < 0){ prstr("Cannot open "); prstr(p); prstr("\n"); nfo -= mflg; done(02); } nfo++; v.cd = 0; ioff = 0; return(0);n2: if((nfo -= mflg) && !stdi)done(0); nfo++; v.cd = ifile = stdi = mflg = 0; ioff = 0; return(0);}popf(){ register i; register char *p, *q; extern char *ttyname(); ioff = offl[--ifi]; ip = ipl[ifi]; if((ifile = ifl[ifi]) == 0){ p = xbuf; q = ibuf; ibufp = xbufp; eibuf = xeibuf; while(q < eibuf)*q++ = *p++; return(0); } if((lseek(ifile,(long)(ioff & ~(IBUFSZ-1)),0) < 0) || ((i = read(ifile,ibuf,IBUFSZ)) < 0))return(1); eibuf = ibuf + i; ibufp = ibuf; if(ttyname(ifile) == (char *)0) if((ibufp = ibuf + (int)(ioff & (IBUFSZ-1))) >= eibuf)return(1); return(0);}flushi(){ if(nflush)return; ch = 0; if((ch0 & CMASK) == '\n')nlflg++; ch0 = 0; copyf++; while(!nlflg){ if(donef && (frame == stk))break; getch(); } copyf--; v.hp = 0; pinchar = inchar; /* XXX */}getach(){ register i; lgf++; if(((i = getch()) & MOT) || ((i&CMASK) == ' ') || ((i&CMASK) == '\n')|| (i & 0200)){ ch = i; i = 0; } lgf--; return(i & 0177);}casenx(){ lgf++; skip(); getname(); nx++; nextfile(); nlflg++; ip = 0; ap = 0; nchar = pendt = 0; frame = stk; nxf = frame + 1;}getname(){ register int i, j, k; lgf++; for(k=0; k < (NS-1); k++){ if(((j=(i=getch()) & CMASK) <= ' ') || (j > 0176))break; nextf[k] = j; } nextf[k] = 0; ch = i; lgf--; return(nextf[0]);}caseso(){ register i; register char *p, *q; lgf++; nextf[0] = 0; if(skip() || !getname() || ((i=open(nextf,0)) <0) || (ifi >= NSO)) { prstr("can't open file "); prstr(nextf); prstr("\n"); done(02); } flushi(); ifl[ifi] = ifile; ifile = i; offl[ifi] = ioff; ioff = 0; ipl[ifi] = ip; ip = 0; nx++; nflush++; if(!ifl[ifi++]){ p = ibuf; q = xbuf; xbufp = ibufp; xeibuf = eibuf; while(p < eibuf)*q++ = *p++; }}casecf(){ /* copy file without change */ int fd, i, n; char buf[OBUFSZ]; flusho(); lgf++; nextf[0] = 0; if(skip() || !getname() || ((fd=open(nextf,0)) <0) || (ifi >= NSO)) { prstr("can't open file "); prstr(nextf); prstr("\n"); done(02); } while ((n = read(fd, buf, OBUFSZ)) > 0) for (i = 0; i < n; i++) oput(buf[i]); flusho(); close(fd);}getpn(a)char *a;{ register i, neg; long atoi1(); if((*a & 0177) == 0)return; neg = 0; ibufp = a; eibuf = (char *)MAXPTR; noscale++; while((i = getch() & CMASK) != 0)switch(i){ case '+': case ',': continue; case '-': neg = MOT; goto d2; default: ch = i; d2: i = atoi1(); if(nonumb)goto fini; else{ *pnp++ = i | neg; neg = 0; if(pnp >= &pnlist[NPN-2]){ prstr("Too many page numbers\n"); done3(-3); } } }fini: if(neg)*pnp++ = -2; *pnp = -1; ch = noscale = print = 0; pnp = pnlist; if(*pnp != -1)chkpn();}setrpt(){ register i, j; copyf++;raw++; i = getch0(); copyf--;raw--; if((i < 0) || (((j = getch0()) & CMASK) == RPT))return; rchar = j; nchar = i & BMASK;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -