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

📄 sed0.c

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 C
📖 第 1 页 / 共 2 页
字号:
					rep->pfl = 1;				}				if(*cp == 'P') {					cp++;					rep->pfl = 2;				}				if(*cp == 'w') {					cp++;					if(*cp++ !=  ' ') {						fprintf(stderr, CGMES, linebuf);						exit(2);					}					if(nfiles >= 10) {						fprintf(stderr, "Too many files in w commands\n");						exit(2);					}					text(fname[nfiles]);					for(i = nfiles - 1; i >= 0; i--)						if(cmp(fname[nfiles],fname[i]) == 0) {							rep->fcode = fcode[i];							goto done;						}					if((rep->fcode = fopen(fname[nfiles], "w")) == NULL) {						fprintf(stderr, "cannot open %s\n", fname[nfiles]);						exit(2);					}					fcode[nfiles++] = rep->fcode;				}				break;			case 'w':				rep->command = WCOM;				if(*cp++ != ' ') {					fprintf(stderr, CGMES, linebuf);					exit(2);				}				if(nfiles >= 10){					fprintf(stderr, "Too many files in w commands\n");					exit(2);				}				text(fname[nfiles]);				for(i = nfiles - 1; i >= 0; i--)					if(cmp(fname[nfiles], fname[i]) == 0) {						rep->fcode = fcode[i];						goto done;					}				if((rep->fcode = fopen(fname[nfiles], "w")) == NULL) {					fprintf(stderr, "Cannot create %s\n", fname[nfiles]);					exit(2);				}				fcode[nfiles++] = rep->fcode;				break;			case 'x':				rep->command = XCOM;				break;			case 'y':				rep->command = YCOM;				seof = *cp++;				rep->re1 = p;				p = ycomp(rep->re1);				if(p == badp) {					fprintf(stderr, CGMES, linebuf);					exit(2);				}				if(p > reend) {					fprintf(stderr, TMMES, linebuf);					exit(2);				}				break;		}done:		if(++rep >= ptrend) {			fprintf(stderr, "Too many commands, last: %s\n", linebuf);			exit(2);		}		rep->ad1 = p;		if(*cp++ != '\0') {			if(cp[-1] == ';')				goto comploop;			fprintf(stderr, CGMES, linebuf);			exit(2);		}	}	rep->command = 0;	lastre = op;}char	*compsub(rhsbuf)char	*rhsbuf;{	register char	*p, *q;	p = rhsbuf;	q = cp;	for(;;) {		if((*p = *q++) == '\\') {			*p++ = CBACK;			*p = *q++;			if(*p > numbra + '0' && *p <= '9')				return(badp);			*p++;			continue;		}		if(*p == CBACK) {			p++;			*p++ = CBACK;		}		if(*p == seof) {			*p++ = '\0';			cp = q;			return(p);		}		if(*p++ == '\0') {			return(badp);		}	}}char *compile(expbuf)char	*expbuf;{	register c;	register char *ep, *sp;	char	neg;	char *lastep, *cstart;	int cclcnt;	int	closed;	char	bracket[NBRA], *bracketp;	if(*cp == seof) {		cp++;		return(expbuf);	}	ep = expbuf;	lastep = 0;	bracketp = bracket;	closed = numbra = 0;	sp = cp;	if (*sp == '^') {		*ep++ = 1;		sp++;	} else {		*ep++ = 0;	}	for (;;) {		if (ep >= &expbuf[ESIZE]) {			cp = sp;			return(badp);		}		if((c = *sp++) == seof) {			if(bracketp != bracket) {				cp = sp;				return(badp);			}			cp = sp;			*ep++ = CEOF;			return(ep);		}		if(c != '*')			lastep = ep;		switch (c) {		case '\\':			if((c = *sp++) == '(') {				if(numbra >= NBRA) {					cp = sp;					return(badp);				}				*bracketp++ = numbra;				*ep++ = CBRA;				*ep++ = numbra++;				continue;			}			if(c == ')') {				if(bracketp <= bracket) {					cp = sp;					return(badp);				}				*ep++ = CKET;				*ep++ = *--bracketp;				closed++;				continue;			}			if(c >= '1' && c <= '9') {				if((c -= '1') >= closed)					return(badp);					*ep++ = CBACK;				*ep++ = c;				continue;			}			if(c == '\n') {				cp = sp;				return(badp);			}			if(c == 'n') {				c = '\n';			}			goto defchar;		case '\0':			continue;		case '\n':			cp = sp;			return(badp);		case '.':			*ep++ = CDOT;			continue;		case '*':			if (lastep == 0)				goto defchar;			if(*lastep == CKET) {				cp = sp;				return(badp);			}			*lastep |= STAR;			continue;		case '$':			if (*sp != seof)				goto defchar;			*ep++ = CDOL;			continue;		case '[':			if(&ep[33] >= &expbuf[ESIZE]) {				fprintf(stderr, "RE too long: %s\n", linebuf);				exit(2);			}			*ep++ = CCL;			neg = 0;			if((c = *sp++) == '^') {				neg = 1;				c = *sp++;			}			cstart = sp;			do {				if(c == '\0') {					fprintf(stderr, CGMES, linebuf);					exit(2);				}				if (c=='-' && sp>cstart && *sp!=']') {					for (c = sp[-2]; c<*sp; c++)						ep[(c & 0377)>>3] |= bittab[c&07];/* 01 */				}				if(c == '\\') {					switch(c = *sp++) {						case 'n':							c = '\n';							break;					}				}				ep[(c & 0377) >> 3] |= bittab[c & 07];		/* 01 */			} while((c = *sp++) != ']');			if(neg)				for(cclcnt = 0; cclcnt < 32; cclcnt++)					ep[cclcnt] ^= -1;			ep[0] &= 0376;			ep += 32;			continue;		defchar:		default:			*ep++ = CCHR;			*ep++ = c;		}	}}rline(lbuf)char	*lbuf;{	register char	*p, *q;	register	t;	static char	*saveq;	p = lbuf - 1;	if(eflag) {		if(eflag > 0) {			eflag = -1;			if(eargc-- <= 0)				exit(2);			q = *++eargv;			while(*++p = *q++) {				if(*p == '\\') {					if((*++p = *q++) == '\0') {						saveq = 0;						return(-1);					} else						continue;				}				if(*p == '\n') {					*p = '\0';					saveq = q;					return(1);				}			}			saveq = 0;			return(1);		}		if((q = saveq) == 0)	return(-1);		while(*++p = *q++) {			if(*p == '\\') {				if((*++p = *q++) == '0') {					saveq = 0;					return(-1);				} else					continue;			}			if(*p == '\n') {				*p = '\0';				saveq = q;				return(1);			}		}		saveq = 0;		return(1);	}	while((t = getc(fin)) != EOF) {		*++p = t;		if(*p == '\\') {			t = getc(fin);			*++p = t;		}		else if(*p == '\n') {			*p = '\0';			return(1);		}	}	*++p = '\0';	return(-1);}char	*address(expbuf)char	*expbuf;{	register char	*rcp;	long	lno;	if(*cp == '$') {		cp++;		*expbuf++ = CEND;		*expbuf++ = CEOF;		return(expbuf);	}	if(*cp == '/' || *cp == '\\') {			/* 02 */		if (*cp == '\\')			/* 02 */			cp++;				/* 02 */		seof = *cp++;		return(compile(expbuf));	}	rcp = cp;	lno = 0;	while(*rcp >= '0' && *rcp <= '9')		lno = lno*10 + *rcp++ - '0';	if(rcp > cp) {		*expbuf++ = CLNUM;		*expbuf++ = nlno;		tlno[nlno++] = lno;		if(nlno >= NLINES) {			fprintf(stderr, "Too many line numbers\n");			exit(2);		}		*expbuf++ = CEOF;		cp = rcp;		return(expbuf);	}	return(0);}cmp(a, b)char	*a,*b;{	register char	*ra, *rb;	ra = a - 1;	rb = b - 1;	while(*++ra == *++rb)		if(*ra == '\0')	return(0);	return(1);}char	*text(textbuf)char	*textbuf;{	register char	*p, *q;	p = textbuf;	q = cp;	while(*q == '\t' || *q == ' ')	q++;	for(;;) {		if((*p = *q++) == '\\')			*p = *q++;		if(*p == '\0') {			cp = --q;			return(++p);		}		if(*p == '\n') {			while(*q == '\t' || *q == ' ')	q++;		}		p++;	}}struct label	*search(ptr)struct label	*ptr;{	struct label	*rp;	rp = labtab;	while(rp < ptr) {		if(cmp(rp->asc, ptr->asc) == 0)			return(rp);		rp++;	}	return(0);}dechain(){	struct label	*lptr;	union reptr	*rptr, *trptr;	for(lptr = labtab; lptr < lab; lptr++) {		if(lptr->address == 0) {			fprintf(stderr, "Undefined label: %s\n", lptr->asc);			exit(2);		}		if(lptr->chain) {			rptr = lptr->chain;			while(trptr = rptr->lb1) {				rptr->lb1 = lptr->address;				rptr = trptr;			}			rptr->lb1 = lptr->address;		}	}}char *ycomp(expbuf)char	*expbuf;{	register char	*ep, *tsp;	register int c;	char	*sp;	ep = expbuf;	sp = cp;	for(tsp = cp; *tsp != seof; tsp++) {		if(*tsp == '\\')			tsp++;		if(*tsp == '\n')			return(badp);	}	tsp++;	while((c = *sp++ & 0377) != seof) {		if(c == '\\' && *sp == 'n') {			sp++;			c = '\n';		}		if((ep[c] = *tsp++) == '\\' && *tsp == 'n') {			ep[c] = '\n';			tsp++;		}		if(ep[c] == seof || ep[c] == '\0')			return(badp);	}	if(*tsp != seof)		return(badp);	cp = ++tsp;	for(c = 0; c <= 0377; c++)		if(ep[c] == 0)			ep[c] = c;	return(ep + 0400);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -