亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? regcomp.c

?? vxworks的完整的源代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
	default:		c = '\0';		break;	}	switch (c) {	case ':':		/* character class */		NEXT2();		REQUIRE(MORE(), REG_EBRACK);		c = PEEK();		REQUIRE(c != '-' && c != ']', REG_ECTYPE);		p_b_cclass(p, cs);		REQUIRE(MORE(), REG_EBRACK);		REQUIRE(EATTWO(':', ']'), REG_ECTYPE);		break;	case '=':		/* equivalence class */		NEXT2();		REQUIRE(MORE(), REG_EBRACK);		c = PEEK();		REQUIRE(c != '-' && c != ']', REG_ECOLLATE);		p_b_eclass(p, cs);		REQUIRE(MORE(), REG_EBRACK);		REQUIRE(EATTWO('=', ']'), REG_ECOLLATE);		break;	default:		/* symbol, ordinary character, or range *//* xxx revision needed for multichar stuff */		start = p_b_symbol(p);		if (SEE('-') && MORE2() && PEEK2() != ']') {			/* range */			NEXT();			if (EAT('-'))				finish = '-';			else				finish = p_b_symbol(p);		} else			finish = start;/* xxx what about signed chars here... */		REQUIRE(start <= finish, REG_ERANGE);		for (i = start; i <= finish; i++)			CHadd(cs, i);		break;	}}/* - p_b_cclass - parse a character-class name and deal with it == static void p_b_cclass(register struct parse *p, register cset *cs); */static voidp_b_cclass(p, cs)register struct parse *p;register cset *cs;{	register char *sp = p->next;	register struct cclass *cp;	register size_t len;	register char *u;	register char c;	while (MORE() && isalpha(PEEK()))		NEXT();	len = p->next - sp;	for (cp = cclasses; cp->name != NULL; cp++)		if (strncmp(cp->name, sp, len) == 0 && cp->name[len] == '\0')			break;	if (cp->name == NULL) {		/* oops, didn't find it */		SETERROR(REG_ECTYPE);		return;	}	u = cp->chars;	while ((c = *u++) != '\0')		CHadd(cs, c);	for (u = cp->multis; *u != '\0'; u += strlen(u) + 1)		MCadd(p, cs, u);}/* - p_b_eclass - parse an equivalence-class name and deal with it == static void p_b_eclass(register struct parse *p, register cset *cs); * * This implementation is incomplete. xxx */static voidp_b_eclass(p, cs)register struct parse *p;register cset *cs;{	register char c;	c = p_b_coll_elem(p, '=');	CHadd(cs, c);}/* - p_b_symbol - parse a character or [..]ed multicharacter collating symbol == static char p_b_symbol(register struct parse *p); */static char			/* value of symbol */p_b_symbol(p)register struct parse *p;{	register char value;	REQUIRE(MORE(), REG_EBRACK);	if (!EATTWO('[', '.'))		return(GETNEXT());	/* collating symbol */	value = p_b_coll_elem(p, '.');	REQUIRE(EATTWO('.', ']'), REG_ECOLLATE);	return(value);}/* - p_b_coll_elem - parse a collating-element name and look it up == static char p_b_coll_elem(register struct parse *p, int endc); */static char			/* value of collating element */p_b_coll_elem(p, endc)register struct parse *p;int endc;			/* name ended by endc,']' */{	register char *sp = p->next;	register struct cname *cp;	register int len;	/* register char c; XXX jcf: not used */	while (MORE() && !SEETWO(endc, ']'))		NEXT();	if (!MORE()) {		SETERROR(REG_EBRACK);		return(0);	}	len = p->next - sp;	for (cp = cnames; cp->name != NULL; cp++)		if (strncmp(cp->name, sp, len) == 0 && cp->name[len] == '\0')			return(cp->code);	/* known name */	if (len == 1)		return(*sp);	/* single character */	SETERROR(REG_ECOLLATE);			/* neither */	return(0);}/* - othercase - return the case counterpart of an alphabetic == static char othercase(int ch); */static char			/* if no counterpart, return ch */othercase(ch)int ch;{	assert(isalpha(ch));	if (isupper(ch))		return(tolower(ch));	else if (islower(ch))		return(toupper(ch));	else			/* peculiar, but could happen */		return(ch);}/* - bothcases - emit a dualcase version of a two-case character == static void bothcases(register struct parse *p, int ch); * * Boy, is this implementation ever a kludge... */static voidbothcases(p, ch)register struct parse *p;int ch;{	register char *oldnext = p->next;	register char *oldend = p->end;	char bracket[3];	assert(othercase(ch) != ch);	/* p_bracket() would recurse */	p->next = bracket;	p->end = bracket+2;	bracket[0] = ch;	bracket[1] = ']';	bracket[2] = '\0';	p_bracket(p);	assert(p->next == bracket+2);	p->next = oldnext;	p->end = oldend;}/* - ordinary - emit an ordinary character == static void ordinary(register struct parse *p, register int ch); */static voidordinary(p, ch)register struct parse *p;register int ch;{	register cat_t *cap = p->g->categories;	if ((p->g->cflags&REG_ICASE) && isalpha(ch) && othercase(ch) != ch)		bothcases(p, ch);	else {		EMIT(OCHAR, (unsigned char)ch);		if (cap[ch] == 0)			cap[ch] = p->g->ncategories++;	}}/* - nonnewline - emit REG_NEWLINE version of OANY == static void nonnewline(register struct parse *p); * * Boy, is this implementation ever a kludge... */static voidnonnewline(p)register struct parse *p;{	register char *oldnext = p->next;	register char *oldend = p->end;	char bracket[4];	p->next = bracket;	p->end = bracket+3;	bracket[0] = '^';	bracket[1] = '\n';	bracket[2] = ']';	bracket[3] = '\0';	p_bracket(p);	assert(p->next == bracket+3);	p->next = oldnext;	p->end = oldend;}/* - repeat - generate code for a bounded repetition, recursively if needed == static void repeat(register struct parse *p, sopno start, int from, int to); */static voidrepeat(p, start, from, to)register struct parse *p;sopno start;			/* operand from here to end of strip */int from;			/* repeated from this number */int to;				/* to this number of times (maybe INFINITY) */{	register sopno finish = HERE();#	define	N	2#	define	INF	3#	define	REP(f, t)	((f)*8 + (t))#	define	MAP(n)	(((n) <= 1) ? (n) : ((n) == INFINITY) ? INF : N)	register sopno copy;	if (p->error != 0)	/* head off possible runaway recursion */		return;	assert(from <= to);	switch (REP(MAP(from), MAP(to))) {	case REP(0, 0):			/* must be user doing this */		DROP(finish-start);	/* drop the operand */		break;	case REP(0, 1):			/* as x{1,1}? */	case REP(0, N):			/* as x{1,n}? */	case REP(0, INF):		/* as x{1,}? */		/* KLUDGE: emit y? as (y|) until subtle bug gets fixed */		INSERT(OCH_, start);		/* offset is wrong... */		repeat(p, start+1, 1, to);		ASTERN(OOR1, start);		AHEAD(start);			/* ... fix it */		EMIT(OOR2, 0);		AHEAD(THERE());		ASTERN(O_CH, THERETHERE());		break;	case REP(1, 1):			/* trivial case */		/* done */		break;	case REP(1, N):			/* as x?x{1,n-1} */		/* KLUDGE: emit y? as (y|) until subtle bug gets fixed */		INSERT(OCH_, start);		ASTERN(OOR1, start);		AHEAD(start);		EMIT(OOR2, 0);			/* offset very wrong... */		AHEAD(THERE());			/* ...so fix it */		ASTERN(O_CH, THERETHERE());		copy = dupl(p, start+1, finish+1);		assert(copy == finish+4);		repeat(p, copy, 1, to-1);		break;	case REP(1, INF):		/* as x+ */		INSERT(OPLUS_, start);		ASTERN(O_PLUS, start);		break;	case REP(N, N):			/* as xx{m-1,n-1} */		copy = dupl(p, start, finish);		repeat(p, copy, from-1, to-1);		break;	case REP(N, INF):		/* as xx{n-1,INF} */		copy = dupl(p, start, finish);		repeat(p, copy, from-1, to);		break;	default:			/* "can't happen" */		SETERROR(REG_ASSERT);	/* just in case */		break;	}}/* - seterr - set an error condition == static int seterr(register struct parse *p, int e); */static int			/* useless but makes type checking happy */seterr(p, e)register struct parse *p;int e;{	if (p->error == 0)	/* keep earliest error condition */		p->error = e;	p->next = nuls;		/* try to bring things to a halt */	p->end = nuls;	return(0);		/* make the return value well-defined */}/* - allocset - allocate a set of characters for [] == static cset *allocset(register struct parse *p); */static cset *allocset(p)register struct parse *p;{	register int no = p->g->ncsets++;	register size_t nc;	register size_t nbytes;	register cset *cs;	register size_t css = (size_t)p->g->csetsize;	register int i;	if (no >= p->ncsalloc) {	/* need another column of space */		p->ncsalloc += CHAR_BIT;		nc = p->ncsalloc;		assert(nc % CHAR_BIT == 0);		nbytes = nc / CHAR_BIT * css;		if (p->g->sets == NULL)			p->g->sets = (cset *)malloc(nc * sizeof(cset));		else			p->g->sets = (cset *)realloc((char *)p->g->sets,							nc * sizeof(cset));		if (p->g->setbits == NULL)			p->g->setbits = (uch *)malloc(nbytes);		else {			p->g->setbits = (uch *)realloc((char *)p->g->setbits,								nbytes);			/* xxx this isn't right if setbits is now NULL */			for (i = 0; i < no; i++)				p->g->sets[i].ptr = p->g->setbits + css*(i/CHAR_BIT);		}		if (p->g->sets != NULL && p->g->setbits != NULL)			(void) memset((char *)p->g->setbits + (nbytes - css),								0, css);		else {			no = 0;			SETERROR(REG_ESPACE);			/* caller's responsibility not to do set ops */		}	}	assert(p->g->sets != NULL);	/* xxx */	cs = &p->g->sets[no];	cs->ptr = p->g->setbits + css*((no)/CHAR_BIT);	cs->mask = 1 << ((no) % CHAR_BIT);	cs->hash = 0;	cs->smultis = 0;	cs->multis = NULL;	return(cs);}/* - freeset - free a now-unused set == static void freeset(register struct parse *p, register cset *cs); */static voidfreeset(p, cs)register struct parse *p;register cset *cs;{	register int i;	register cset *top = &p->g->sets[p->g->ncsets];	register size_t css = (size_t)p->g->csetsize;	for (i = 0; i < (int) css; i++)		CHsub(cs, i);	if (cs == top-1)	/* recover only the easy case */		p->g->ncsets--;}/* - freezeset - final processing on a set of characters == static int freezeset(register struct parse *p, register cset *cs); * * The main task here is merging identical sets.  This is usually a waste * of time (although the hash code minimizes the overhead), but can win * big if REG_ICASE is being used.  REG_ICASE, by the way, is why the hash * is done using addition rather than xor -- all ASCII [aA] sets xor to * the same value! */static int			/* set number */freezeset(p, cs)register struct parse *p;register cset *cs;{	register uch h = cs->hash;	register int i;	register cset *top = &p->g->sets[p->g->ncsets];	register cset *cs2;	register size_t css = (size_t)p->g->csetsize;	/* look for an earlier one which is the same */	for (cs2 = &p->g->sets[0]; cs2 < top; cs2++)		if (cs2->hash == h && cs2 != cs) {			/* maybe */			for (i = 0; i < (int) css; i++)				if (!!CHIN(cs2, i) != !!CHIN(cs, i))					break;		/* no */			if (i == (int) css)				break;			/* yes */		}	if (cs2 < top) {	/* found one */		freeset(p, cs);		cs = cs2;	}	return((int)(cs - p->g->sets));}/* - firstch - return first character in a set (which must have at least one) == static int firstch(register struct parse *p, register cset *cs); */static int			/* character; there is no "none" value */firstch(p, cs)register struct parse *p;register cset *cs;{	register int i;	register size_t css = (size_t)p->g->csetsize;	for (i = 0; i < (int) css; i++)		if (CHIN(cs, i))			return((char)i);	assert(never);	return(0);		/* arbitrary */}/* - nch - number of characters in a set == static int nch(register struct parse *p, register cset *cs); */static intnch(p, cs)register struct parse *p;register cset *cs;{	register int i;	register size_t css = (size_t)p->g->csetsize;	register int n = 0;	for (i = 0; i < (int) css; i++)		if (CHIN(cs, i))

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91九色02白丝porn| 欧美a一区二区| 成人18视频日本| 国产精品美女久久久久久| 国产成a人无v码亚洲福利| 欧美激情一区不卡| 91蝌蚪国产九色| 亚洲综合一二区| 欧美美女直播网站| 蜜臀va亚洲va欧美va天堂| 亚洲精品一区二区在线观看| 国产精品99久久久久久有的能看| 久久精品视频在线看| aaa亚洲精品| 亚洲午夜久久久| 欧美精品一区二区三区蜜桃| 国产成人自拍高清视频在线免费播放| 中文字幕不卡在线播放| 色av成人天堂桃色av| 久久精工是国产品牌吗| 国产精品久久毛片| 欧美吞精做爰啪啪高潮| 久久99精品视频| 中文字幕一区免费在线观看| 色欧美片视频在线观看在线视频| 午夜精品视频一区| 久久久久久97三级| 欧美亚州韩日在线看免费版国语版| 久久精品国产在热久久| 国产精品久久久久久久午夜片 | 免费观看一级特黄欧美大片| 久久久久久久一区| 欧美在线免费视屏| 国产夫妻精品视频| 亚洲成人手机在线| 久久精品亚洲麻豆av一区二区| 一本久久a久久免费精品不卡| 美女视频网站久久| 日韩久久一区二区| 日韩免费性生活视频播放| 91毛片在线观看| 久草这里只有精品视频| 亚洲四区在线观看| 欧美videofree性高清杂交| 99久久精品免费看国产| 国产一区二区在线看| 一区二区三区在线视频免费| 26uuu国产日韩综合| 欧美无砖专区一中文字| 成人aa视频在线观看| 捆绑紧缚一区二区三区视频| 亚洲观看高清完整版在线观看 | 欧美国产精品劲爆| 91精品国产综合久久久蜜臀图片| 91麻豆免费看| 成人午夜短视频| 国产一区二区毛片| 日韩电影免费一区| 亚洲成a人v欧美综合天堂下载| 中文乱码免费一区二区| 久久久久久一二三区| 精品欧美一区二区三区精品久久| 欧美性xxxxx极品少妇| 色综合天天综合网天天狠天天| 国产精品1024| 国模娜娜一区二区三区| 蜜桃视频第一区免费观看| 亚洲国产精品一区二区尤物区| 亚洲人成网站在线| 国产精品国产三级国产普通话蜜臀 | 国产精品国产三级国产aⅴ入口 | 粉嫩在线一区二区三区视频| 韩国三级在线一区| 精品一二线国产| 免费不卡在线观看| 免费在线欧美视频| 日本欧美加勒比视频| 免费观看在线色综合| 精品在线播放免费| 开心九九激情九九欧美日韩精美视频电影| 视频在线观看国产精品| 五月天国产精品| 三级在线观看一区二区 | 日韩电影在线观看网站| 五月婷婷综合激情| 日韩精品乱码免费| 日韩电影一区二区三区四区| 免费看日韩精品| 精品一区二区影视| 国产精品伊人色| 成人av网站免费| 91浏览器在线视频| 欧美日韩亚洲综合一区| 欧美日韩高清影院| 精品精品国产高清a毛片牛牛| 欧美精品一区二区三区久久久 | 91精品国产丝袜白色高跟鞋| 日韩欧美www| 久久精品这里都是精品| 日韩一区在线看| 亚洲国产美女搞黄色| 美美哒免费高清在线观看视频一区二区 | 国产欧美日韩不卡| 国产精品初高中害羞小美女文| 亚洲人成网站在线| 亚洲1区2区3区4区| 韩国成人在线视频| 91首页免费视频| 欧美日本不卡视频| 久久久久久一级片| 亚洲综合无码一区二区| 看电视剧不卡顿的网站| av中文字幕亚洲| 在线91免费看| 国产女人18毛片水真多成人如厕| 亚洲欧美在线视频| 美女视频黄 久久| 91蜜桃在线免费视频| 日韩欧美一级二级| 亚洲精品国产精华液| 激情五月激情综合网| 91麻豆精品视频| 久久综合久久综合九色| 美女网站一区二区| 成人久久18免费网站麻豆| 精品国产免费人成电影在线观看四季 | 日韩一区二区三区视频在线 | 精品国产一二三| **性色生活片久久毛片| 日韩中文字幕1| 成人深夜在线观看| 欧美精品在线视频| 国产精品久久久久影院老司| 天堂在线一区二区| 91无套直看片红桃| 国产欧美一区二区精品性色超碰| 亚洲123区在线观看| 成人激情综合网站| 欧美mv日韩mv亚洲| 亚洲一二三区不卡| 成人美女视频在线观看18| 日韩写真欧美这视频| 一区二区三区四区国产精品| 国产盗摄一区二区| 欧美tk丨vk视频| 午夜精品成人在线视频| 97精品久久久午夜一区二区三区 | 久久这里都是精品| 亚洲高清免费视频| 91免费版pro下载短视频| 国产午夜亚洲精品不卡| 久久精品国产精品亚洲综合| 欧美高清hd18日本| 亚洲一区二区三区四区五区中文| 成人在线视频一区二区| 久久久久一区二区三区四区| 久久99精品久久久久久国产越南| 欧美一区二区在线播放| 亚洲国产一区二区a毛片| 91免费视频网| 亚洲你懂的在线视频| 99久久精品99国产精品| 亚洲国产精品二十页| 国产成人免费在线观看| 欧美精品一区二区三区在线播放| 美女视频一区在线观看| 日韩美女一区二区三区| 美女视频网站久久| 日韩精品一区二区三区在线播放| 琪琪久久久久日韩精品| 欧美xingq一区二区| 久久精品国产精品亚洲红杏| 欧美成人r级一区二区三区| 麻豆一区二区三区| 久久―日本道色综合久久| 狠狠色狠狠色合久久伊人| 久久品道一品道久久精品| 国产精品一区二区在线看| 国产欧美一区二区精品性| 丁香五精品蜜臀久久久久99网站| 中文字幕免费一区| 一本色道久久综合亚洲91| 亚洲成人av电影| 欧美一区二区三区免费大片| 久久99精品国产.久久久久久| 欧美成人综合网站| 成人午夜又粗又硬又大| 中文字幕日韩一区| 91黄视频在线观看| 日本aⅴ精品一区二区三区| 久久综合五月天婷婷伊人| 懂色中文一区二区在线播放| 亚洲欧洲成人自拍| 欧美日本一道本| 国产裸体歌舞团一区二区| 国产精品三级在线观看| 欧美日韩免费观看一区三区| 麻豆精品新av中文字幕| 国产日韩欧美精品一区| 色综合一个色综合亚洲|