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

📄 checksg.c

📁 harvest是一个下载html网页得机器人
💻 C
字号:
/* Copyright (c) 1994 Sun Wu, Udi Manber, Burra Gopal.  All Rights Reserved. */#include "agrep.h"#include "checkfile.h"extern int errno;extern CHAR Progname[MAXNAME]; extern int SGREP, PAT_FILE, PAT_BUFFER, EXITONERROR, SIMPLEPATTERN,	CONSTANT, D, NOUPPER, JUMP, I, LINENUM, INVERSE, WORDBOUND, WHOLELINE,	SILENT, DNA, BESTMATCH;/* Make it an interface routine that tells you whether mgrep can be used for the pattern or not: must sneak and access global variable D though... */intchecksg(Pattern, D, set)CHAR *Pattern; int D;int set;	/* should I set flags SGREP and DNA? not if called from glimpse via library */{	char c;	int i, m;	int NOTSGREP = 0;	if (set) SGREP = OFF;	m = strlen(Pattern);#if	DEBUG	fprintf(stderr, "checksg: len=%d, pat=%s, pat[len]=%d\n", m, Pattern, Pattern[m]);#endif	if(!(PAT_FILE || PAT_BUFFER) && (m <= D)) {		fprintf(stderr, "%s: size of pattern '%s' must be > #of errors %d\n", Progname, Pattern, D);		if (!EXITONERROR) {			errno = AGREP_ERROR;			return -1;		}		else exit(2);	}	SIMPLEPATTERN = ON;	for (i=0; i < m; i++) 	{		switch(Pattern[i])		{		case ';' : 			SIMPLEPATTERN = OFF; 			goto outoffor;		case ',' : 			SIMPLEPATTERN = OFF; 			goto outoffor;		case '.' : 			SIMPLEPATTERN = OFF; 			goto outoffor;		case '*' : 			SIMPLEPATTERN = OFF; 			goto outoffor;		case '-' : 			SIMPLEPATTERN = OFF; 			goto outoffor;		case '[' : 			SIMPLEPATTERN = OFF; 			goto outoffor;		case ']' : 			SIMPLEPATTERN = OFF; 			goto outoffor;		case '(' : 			SIMPLEPATTERN = OFF; 			goto outoffor;		case ')' : 			SIMPLEPATTERN = OFF; 			goto outoffor;		case '<' : 			SIMPLEPATTERN = OFF; 			goto outoffor;		case '>' : 			SIMPLEPATTERN = OFF; 			goto outoffor;		case '^' : 			/* NOTSGREP = 1; sgrep does it; bg 4/27/97 */			if(D > 0) {				SIMPLEPATTERN = OFF; 				goto outoffor;			}			break;		case '$' : 			/* NOTSGREP = 1; sgrep does it; bg 4/27/97 */			if(D > 0) {				SIMPLEPATTERN = OFF; 				goto outoffor;			}			break;		case '|' : 			SIMPLEPATTERN = OFF; 			goto outoffor;		case '#' : 			SIMPLEPATTERN = OFF; 			goto outoffor;		case '{':			SIMPLEPATTERN = OFF;			goto outoffor;		case '}':			SIMPLEPATTERN = OFF;			goto outoffor;		case '~':			SIMPLEPATTERN = OFF;			goto outoffor;		case '\\' : 		{	/* Should I DO the left shift Pattern including Pattern[m] which is '\0', or just ignore the next character after '\\'????? */			if (set) {	/* preprocess and maskgen figure out what to do */				i++;	/* in addition to for loop ++ */			}			else {	/* maskgen won't be called if we can help it, so shift it to make it verbatim */				/*				int j;				for (j=i; j<m; j++) Pattern[j] = Pattern[j+1];				m --;				*/				i++;			}			break;		}		default  : 			break;		}	}outoffor:	if (CONSTANT) SIMPLEPATTERN = ON;	if (SIMPLEPATTERN == OFF) return 0;	if (BESTMATCH) return 0;	/* can have errors, not simple */	if (!set && (D>0)) return 0;	/* errors, not simple */	if (NOUPPER && (D>0)) return 0;	/* errors, not simple */     	if (JUMP == ON) return 0;	/* I, S, D costs, not simple */	if (I == 0) return 0;		/* I has 0 cost not 1, not simple */	if (LINENUM) return 0;		/* can't use mgrep, so not simple */	if (WORDBOUND && (D > 0)) return 0; /* errors, not simple */  	if (WHOLELINE && (D > 0)) return 0; /* errors, not simple */  	if (SILENT) return 1;		/* dont care output, so dont care pat */	if (set) {		if (!NOTSGREP || CONSTANT) SGREP = ON;		if (m >= 16) DNA = ON;		for(i=0; i<m; i++) {			c = Pattern[i];			if(c == 'a' || c == 'c' || c == 't' || c == 'g' ) ;			else DNA = OFF;		}	}#if	0	/* Ditch this: sgrep does it internally anyway */	if (SGREP) {	/* => set MUST be on */	    for (i=0; i < m; i++) 	    {		switch(Pattern[i])		{		case '\\' : 			for (j=i; j<m; j++) Pattern[j] = Pattern[j+1];			m --;			break;		default  : 			break;		}	    }	}#endif	/*0*/	return 1;			/* remains simple */}

⌨️ 快捷键说明

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