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

📄 regsub.c

📁 最新Minix3源码
💻 C
字号:
/* regsub * *	Copyright (c) 1986 by University of Toronto. *	Written by Henry Spencer.  Not derived from licensed software. * *	Permission is granted to anyone to use this software for any *	purpose on any computer system, and to redistribute it freely, *	subject to the following restrictions: * *	1. The author is not responsible for the consequences of use of *		this software, no matter how awful, even if they arise *		from defects in it. * *	2. The origin of this software must not be misrepresented, either *		by explicit claim or by omission. * *	3. Altered versions must be plainly marked as such, and must not *		be misrepresented as being the original software. */#include <lib.h>#include <string.h>#include <regexp.h>#include <stdio.h>/* The first byte of the regexp internal "program" is actually this magic * number; the start node begins in the second byte. */#define	MAGIC	0234#define CHARBITS 0377#ifndef CHARBITS#define	UCHARAT(p)	((int)*(unsigned char *)(p))#else#define	UCHARAT(p)	((int)*(p)&CHARBITS)#endif/* - regsub - perform substitutions after a regexp match */void regsub(prog, source, dest)regexp *prog;char *source;char *dest;{  register char *src;  register char *dst;  register char c;  register int no;  register int len;  if (prog == (regexp *)NULL || source == (char *)NULL || dest == (char *)NULL) {	regerror("NULL parm to regsub");	return;  }  if (UCHARAT(prog->program) != MAGIC) {	regerror("damaged regexp fed to regsub");	return;  }  src = source;  dst = dest;  while ((c = *src++) != '\0') {	if (c == '&')		no = 0;	else if (c == '\\' && '0' <= *src && *src <= '9')		no = *src++ - '0';	else		no = -1;	if (no < 0) {		/* Ordinary character. */		if (c == '\\' && (*src == '\\' || *src == '&')) c = *src++;		*dst++ = c;	} else	if (prog->startp[no] != (char *)NULL && prog->endp[no] != (char *)NULL) {		len = (int) (prog->endp[no] - prog->startp[no]);		strncpy(dst, prog->startp[no], len);		dst += len;		if (len != 0 && *(dst - 1) == '\0') {	/* strncpy hit NUL. */			regerror("damaged match string");			return;		}	}  }  *dst++ = '\0';}

⌨️ 快捷键说明

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