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

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

?? maskgen.c

?? Mehldau和Myer的Agrep3版本
?? C
字號:
/* Copyright (c) 1994 Sun Wu, Udi Manber, Burra Gopal.  All Rights Reserved. */

/*	[chg]	22.09.96	UL850[].lower_1 -> UL850[].lower	[TG]
	[chg]	21.08.96	now using ISO_CHAR.H and 
				table look-up for upper-lower conversion. [TG]
*/

#include "agrep.h"
#include "codepage.h"

extern unsigned char LUT[256];
extern int CODEPAGE;
extern struct CODEPAGE_struct CP[CODEPAGES][CPSIZE];

extern unsigned D_endpos, endposition, Init1, wildmask;
extern Mask[], Bit[], Init[], NO_ERR_MASK;
extern int AND, REGEX, NOUPPER, D_length;
extern unsigned char Progname[];
extern int agrep_initialfd;
extern int EXITONERROR;
#ifndef __BORLANDC__
extern int errno;
#endif

int
maskgen(Pattern, D)

unsigned char *Pattern; 
int D;
{
	struct term { 
		int flag; 
		unsigned char class[WORD];
	} 
	position[WORD+10];
	unsigned char c, pp;

	int i, j, k, l, M, OR=0, EVEN = 0, base, No_error;

#ifdef	DEBUG
	fprintf(stderr, "maskgen: len=%d, pat=%s, D=%d\n", strlen(Pattern), Pattern, D);
#endif
	for(i=0; i<WORD; i++) position[i].class[0] = '\0';
	for(i=0; i<WORD; i++) position[i].flag = 0;
	wildmask = NO_ERR_MASK = endposition = 0;
	No_error = 0;
	if ((M = strlen(Pattern)) <= 0) return 0;

	/* the metasymbols are not transposed in that table */
	
	if(NOUPPER) {
#if ((defined(__EMX__) || defined(_WIN32)) && defined(ISO_CHAR_SET))
		for(i=0; i<M; i++) Pattern[i] = LUT[Pattern[i]];
#else
		for(i=0; i<M; i++) if(isalpha((int)Pattern[i])) 
			if (isupper((int)Pattern[i])) Pattern[i] = tolower((int)Pattern[i]);
#endif
	}
	
#ifdef DEBUG
	for (i=0;i<256;i++) if (CP[CODEPAGE][i].metasymb > 0) printf("%d %c = metasymb[%d]\n",CP[CODEPAGE][i].upper,CP[CODEPAGE][i].upper,CP[CODEPAGE][i].metasymb);
	for(i=0; i<M; i++) printf("%d ", Pattern[i]);
	printf("\n");
	for(i=0; i<M; i++) printf("%c", Pattern[i]);
	printf("\n");
#endif
	for (i=0, j=1; i< M; i++)
	{
		pp=Pattern[i];
		
		if (pp==WILDCD) {
			if(REGEX) {
				position[j].class[0] = '.';
				position[j].class[1] = '.';
				position[j++].class[2] = '\0'; 
			}
			wildmask = wildmask | Bit[j-1];
		}
		else if (pp==LANGLE) { 
			No_error = ON; 
			EVEN++;
		}
		else if (pp==RANGLE) { 
			No_error = OFF; 
			EVEN--;
			if(EVEN < 0) {
				fprintf(stderr, "%s: unmatched '<', '>' (use \\<, \\> to search for <, >)\n", Progname);
				if (!EXITONERROR) {
					errno = AGREP_ERROR;
					return -1;
				}
				else exit(2);
			}
		}
		else if (pp==LRANGE) {
			if (No_error == ON) NO_ERR_MASK = NO_ERR_MASK | Bit[j];
			i=i+1; 
			if (Pattern[i] == NOTSYM) { 
				position[j].flag = Compl; 
				i++; 
			}
			k=0;
			while ((Pattern[i] != RRANGE) && i < M)
			{ 
				if(Pattern[i] == HYPHEN) 
				{ 
					position[j].class[k-1] = Pattern[i+1];
					i=i+2; 
				}
				else { 
					position[j].class[k] = position[j].class[k+1] = Pattern[i];
					k = k+2; 
					i++;
				}
			}
			if(i == M) {
				fprintf(stderr, "%s: unmatched '[', ']' (use \\[, \\] to search for [, ])\n", Progname);
				if (!EXITONERROR) {
					errno = AGREP_ERROR;
					return -1;
				}
				else exit(2);
			}
			position[j].class[k] = '\0';
			j++; 
		}
		else if (pp==RRANGE) {
			fprintf(stderr, "%s: unmatched '[', ']' (use \\[, \\] to search for [, ])\n", Progname);
			if (!EXITONERROR) {
				errno = AGREP_ERROR;
				return -1;
			}
			else exit(2);
		}
		else if (pp==ORPAT) {
			if(REGEX == ON || AND == ON) {
				fprintf(stderr, "illegal pattern: cannot handle OR (',') and AND (';')/regular-expressions simultaneously\n");
				if (!EXITONERROR) {
					errno = AGREP_ERROR;
					return -1;
				}
				else exit(2);
			}
			OR = ON;
			position[j].flag = 2; 
			position[j].class[0] = '\0';
			endposition = endposition | Bit[j++]; 
		}
		else if (pp==ANDPAT) {
			position[j].flag = 2; 
			position[j].class[0] = '\0'; 
			if(j > D_length) AND = ON;
			if(OR || (REGEX == ON && j>D_length)) {
				fprintf(stderr, "illegal pattern: cannot handle AND (';') and OR (',')/regular-expressions simultaneously\n");
				if (!EXITONERROR) {
					errno = AGREP_ERROR;
					return -1;
				}
				else exit(2);
			}
			endposition = endposition | Bit[j++]; 
		}
			/*
				case ' '    : if (Pattern[i-1] == ORPAT || Pattern[i-1] == ANDPAT) break;
							  if(No_error == ON) NO_ERR_MASK = NO_ERR_MASK | Bit[j];
							  position[j].flag = 0;
							  position[j].class[0] = position[j].class[1] = Pattern[i];
							  position[j++].class[2] = '\0';  break;
			*/
		else if (pp=='\n') {
			NO_ERR_MASK = NO_ERR_MASK | Bit[j];
			position[j].class[0] = position[j].class[1] = '\n';
			position[j++].class[2] = '\0'; 
		}
		else if (pp==WORDB) {
			NO_ERR_MASK = NO_ERR_MASK | Bit[j];
			position[j].class[0] = 1;
			position[j].class[1] = 47;
			position[j].class[2] = 58;
			position[j].class[3] = 64;
			position[j].class[4] = 91;
			position[j].class[5] = 96;
			position[j].class[6] = 123;
			position[j].class[7] = 127;
			position[j++].class[8] = '\0';
		}
		else if (pp==NNLINE) {
			NO_ERR_MASK |= Bit[j];
			position[j].class[0] = position[j].class[1] = '\n';
			position[j].class[2] = position[j].class[3] = NNLINE;
			position[j++].class[4] = '\0';
		}
		else if ((pp != STAR) & (pp != ORSYM) & (pp != LPARENT) & (pp != RPARENT)) {
		 	if(No_error == ON) NO_ERR_MASK = NO_ERR_MASK | Bit[j];
			position[j].flag = 0;
			position[j].class[0] = position[j].class[1] = Pattern[i];
			position[j++].class[2] = '\0'; 
		};
		
		if(j > WORD) {
			fprintf(stderr, "%s: pattern too long (has > %d chars)\n", Progname, WORD);
			if (!EXITONERROR) {
				errno = AGREP_ERROR;
				return -1;
			}
			else exit(2);
		}
	}
	if (EVEN != 0) {
		fprintf(stderr, "%s: unmatched '<', '>' (use \\<, \\> to search for <, >)\n", Progname);
		if (!EXITONERROR) {
			errno = AGREP_ERROR;
			return -1;
		}
		else exit(2);
	}
	M = j - 1;
	base = WORD - M;
	wildmask = (wildmask >> base);
	endposition = (endposition >> base);
	NO_ERR_MASK = (NO_ERR_MASK >> 1) & (~Bit[1]);
	NO_ERR_MASK = ~NO_ERR_MASK >> (base-1);
	for (i=1; i<= WORD - M ; i++) Init[0] = Init[0] | Bit[i];
	Init[0] = Init[0] | endposition;
	
	/* not necessary for INit[i], i>0, */
	/* but at every begining of the matching process append one
	   no-match character to initialize the error vectors */
	   
	endposition = ( endposition << 1 ) + 1;
	Init1 = (Init[0] | wildmask | endposition) ;
	D_endpos = ( endposition >> ( M - D_length ) ) << ( M - D_length);
	endposition = endposition ^ D_endpos;
#ifdef DEBUG
	printf("endposition: %o\n", endposition);
	printf("no_err_mask: %o\n", NO_ERR_MASK);
#endif
	for(c=0, i=0; i < MAXSYM; c++, i++)
	{
		for (k=1, l=0; k<=M ; k++, l=0)  {
			while (position[k].class[l] != '\0') {
				if ((position[k].class[l] == NOCARE) && ((c != '\n') || REGEX) ) 
				{
					Mask[c] = Mask[c] | Bit[base + k]; 
					break; 
				}
				if (c >= position[k].class[l] && c <= position[k].class[l+1])
				{  
					Mask[c] = Mask[c] | Bit[base + k]; 
					break; 
				}
				l = l + 2;  
			}
			if (position[k].flag == Compl) Mask[c] = Mask[c] ^ Bit[base+k];
		}
	}

	if(NOUPPER) for(i=0; i<MAXSYM; i++)

#if ((defined(__EMX__) || defined(_WIN32)) && defined(ISO_CHAR_SET))
		Mask[i] = Mask[LUT[i]];
#else
		if (isupper(i)) Mask[i] = Mask[tolower(i)];
#endif

	return(M);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美中文字幕亚洲一区二区va在线| 欧美高清hd18日本| 91福利资源站| 26uuu国产一区二区三区| 最新国产精品久久精品| 日本欧美一区二区三区| 色哟哟欧美精品| 国产亚洲精品中文字幕| 蜜臀久久99精品久久久久宅男| 97精品国产露脸对白| 久久欧美一区二区| 秋霞影院一区二区| 在线免费观看日本欧美| 日本一区二区视频在线观看| 玖玖九九国产精品| 欧美系列在线观看| 亚洲精品国产高清久久伦理二区| 国产不卡视频在线观看| 精品乱人伦一区二区三区| 亚洲国产乱码最新视频| 91成人免费在线视频| 1000部国产精品成人观看| 国产成人av一区二区三区在线| 欧美精品1区2区| 亚洲一区二区三区四区在线| av电影在线观看完整版一区二区| 国产拍欧美日韩视频二区| 国产成人一区二区精品非洲| 欧美成人a∨高清免费观看| 香蕉久久一区二区不卡无毒影院 | 欧美在线视频你懂得| 成人欧美一区二区三区| 成人午夜碰碰视频| 亚洲欧洲国产日韩| 91在线porny国产在线看| 亚洲日本va在线观看| 91麻豆国产福利在线观看| 一区二区三区欧美亚洲| 欧美日韩激情一区| 五月激情综合色| 日韩精品一区二区在线观看| 国产原创一区二区| 亚洲国产精品av| 成人午夜免费电影| 久久99久久99小草精品免视看| 91精品综合久久久久久| 激情小说亚洲一区| 国产嫩草影院久久久久| 91麻豆免费在线观看| 亚洲成人免费av| 日韩一级完整毛片| 国产成人日日夜夜| 亚洲视频网在线直播| 欧美日韩电影在线播放| 韩国精品在线观看| 国产精品久久久久久久久久免费看| 91小视频免费看| 丝袜a∨在线一区二区三区不卡| 26uuu国产在线精品一区二区| www..com久久爱| 亚洲国产精品影院| 久久精品夜色噜噜亚洲a∨| aaa亚洲精品| 石原莉奈一区二区三区在线观看| 精品成人一区二区三区| caoporn国产一区二区| 亚洲成人你懂的| 久久精品无码一区二区三区| 欧美无人高清视频在线观看| 国产综合久久久久久鬼色 | 色8久久人人97超碰香蕉987| 日韩精品一二三四| 国产精品麻豆欧美日韩ww| 欧洲日韩一区二区三区| 国产麻豆精品theporn| 亚洲电影中文字幕在线观看| 久久这里只有精品首页| 在线观看亚洲成人| 国产高清在线精品| 日韩va欧美va亚洲va久久| 亚洲天堂精品视频| 精品国免费一区二区三区| 色婷婷精品大在线视频| 国产精品一线二线三线| 日韩国产欧美在线视频| 亚洲免费观看高清完整版在线观看熊| 日韩欧美一区二区视频| 欧洲亚洲国产日韩| www.性欧美| 国产精品99久| 蜜桃在线一区二区三区| 一区二区三区在线免费播放| 中文av一区二区| 久久蜜桃av一区二区天堂| 91麻豆精品国产无毒不卡在线观看| 91视视频在线直接观看在线看网页在线看| 日本中文字幕一区二区视频| 一区二区在线观看免费视频播放| 久久精品在线观看| 精品欧美一区二区久久| 91精品国产高清一区二区三区| 91蝌蚪porny九色| 不卡的电影网站| 成人av午夜电影| 国产a精品视频| 国产麻豆精品一区二区| 欧美在线观看禁18| 99久久久精品| 91亚洲精品久久久蜜桃| 99综合电影在线视频| 成人av综合一区| 99re成人精品视频| 97久久精品人人澡人人爽| 91偷拍与自偷拍精品| 99v久久综合狠狠综合久久| 波多野洁衣一区| 91亚洲永久精品| 在线观看视频欧美| 欧美日韩在线一区二区| 欧美日韩电影在线| 日韩欧美一区电影| 久久久噜噜噜久久中文字幕色伊伊| 久久无码av三级| 国产精品视频第一区| 亚洲欧美怡红院| 一区二区欧美国产| 亚洲一区国产视频| 日韩电影免费在线观看网站| 精品一区二区在线视频| 精品亚洲国内自在自线福利| 国产成人综合网| 91视频精品在这里| 欧美日韩亚洲综合在线| 日韩无一区二区| 国产视频不卡一区| 自拍偷拍国产精品| 午夜精品成人在线视频| 国产曰批免费观看久久久| k8久久久一区二区三区| 欧美日韩三级一区| 精品少妇一区二区三区免费观看 | 91在线观看成人| 欧美日韩国产天堂| 精品日韩欧美在线| 国产精品久久久久久久久果冻传媒 | 韩国成人福利片在线播放| 成人一道本在线| 欧美日韩精品是欧美日韩精品| 欧美大片在线观看| 日韩一区欧美一区| 看电影不卡的网站| 色婷婷久久久久swag精品| 精品三级av在线| 中文字幕在线观看不卡视频| 午夜国产不卡在线观看视频| 国产一区二区三区免费播放| 色乱码一区二区三区88| 精品99一区二区| 亚洲一区二区五区| 丰满少妇久久久久久久| 精品视频在线看| 欧美激情一区二区三区| 日本亚洲天堂网| av福利精品导航| 久久蜜桃av一区精品变态类天堂| 亚洲动漫第一页| 91在线免费看| 国产女同互慰高潮91漫画| 日韩av一区二区三区| 91麻豆swag| 欧美国产精品中文字幕| 久久精品国产亚洲aⅴ| 在线精品亚洲一区二区不卡| 国产精品全国免费观看高清 | 国产福利91精品一区二区三区| 欧美日韩亚洲另类| 亚洲图片欧美激情| 国产精品123区| 精品国产乱码久久久久久闺蜜 | 中日韩av电影| 国产美女视频91| 欧美α欧美αv大片| 亚洲国产一区二区a毛片| 色综合色综合色综合色综合色综合| 精品国产污污免费网站入口| 首页亚洲欧美制服丝腿| 欧美情侣在线播放| 亚洲成人动漫一区| 97aⅴ精品视频一二三区| 久久久亚洲高清| 国内成人精品2018免费看| 精品国产免费久久| 国内精品不卡在线| www成人在线观看| 九一九一国产精品| 精品欧美一区二区在线观看| 久久超碰97人人做人人爱| 日韩女优视频免费观看| 精品在线观看免费| 久久精品一区二区三区不卡牛牛|