⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 n1.c

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 C
📖 第 1 页 / 共 2 页
字号:
}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 + -