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

📄 agrep.c

📁 harvest是一个下载html网页得机器人
💻 C
📖 第 1 页 / 共 5 页
字号:
					r2 = (Next[r3] & CMask) | r1;				}				else {  					r1 = Init1 & r3;            /* match against '\n' */					r2 = Next[r3] & CMask | r1;					j++;					if (DELIMITER) CurrentByteOffset -= D_length;					else CurrentByteOffset -= 1;					if(TAIL) r2 = Next[r2] | r2 ;   /* epsilon move */					if(( r2 & 1) ^ INVERSE) {						if(FILENAMEONLY && (NEW_FILE || !POST_FILTER)) {							num_of_matched++;							if (agrep_finalfp != NULL)								fprintf(agrep_finalfp, "%s", CurrentFileName);							else {								int outindex;								for(outindex=0; (outindex+agrep_outpointer<agrep_outlen) &&										(CurrentFileName[outindex] != '\0'); outindex++) {									agrep_outbuffer[agrep_outpointer+outindex] = CurrentFileName[outindex];								}								if ((CurrentFileName[outindex] != '\0') || (outindex+agrep_outpointer>=agrep_outlen)) {									OUTPUT_OVERFLOW;									free_buf(Text, buffer);									return -1;								}								agrep_outpointer += outindex;							}							if (PRINTFILETIME) {								char *s = aprint_file_time(CurrentFileTime);								if (agrep_finalfp != NULL)									fprintf(agrep_finalfp, "%s", s);								else {									int outindex;									for(outindex=0; (outindex+agrep_outpointer<agrep_outlen) &&											(s[outindex] != '\0'); outindex++) {										agrep_outbuffer[agrep_outpointer+outindex] = s[outindex];									}									if ((s[outindex] != '\0') || (outindex+agrep_outpointer>=agrep_outlen)) {										OUTPUT_OVERFLOW;										free_buf(Text, buffer);										return -1;									}									agrep_outpointer += outindex;								}							}							if (agrep_finalfp != NULL)								fprintf(agrep_finalfp, "\n");							else {								if (agrep_outpointer+1>=agrep_outlen) {									OUTPUT_OVERFLOW;									free_buf(Text, buffer);									return -1;								}								else agrep_outbuffer[agrep_outpointer++] = '\n';							}							free_buf(Text, buffer);							NEW_FILE = OFF;							return 0;						} 						if (-1 == r_output(buffer, i-1, end, j)) {free_buf(Text, buffer); return -1;}						if (((LIMITOUTPUT > 0) && (LIMITOUTPUT <= num_of_matched)) ||						    ((LIMITPERFILE > 0) && (LIMITPERFILE <= num_of_matched - prev_num_of_matched))) {							free_buf(Text, buffer);							return 0;	/* done */						}					}					lasti = i - 1;					r3 = Init0;					r2 = (Next[r3] & CMask) | Init0;					if (DELIMITER) CurrentByteOffset += 1*D_length;					else CurrentByteOffset += 1*1;				}				c = buffer[i++];   				CurrentByteOffset ++;				CMask = RMask[c];				if(c != Newline)				{					r1 = Init1 & r2;					r3 = (Next[r2] & CMask) | r1;				}				else {  					j++;					if (DELIMITER) CurrentByteOffset -= D_length;					else CurrentByteOffset -= 1;					r1 = Init1 & r2;            /* match against endofline */					r3 = Next[r2] & CMask | r1;					if(TAIL) r3 = Next[r3] | r3;					if(( r3 & 1) ^ INVERSE) {						if(FILENAMEONLY && (NEW_FILE || !POST_FILTER)) {							num_of_matched++;							if (agrep_finalfp != NULL)								fprintf(agrep_finalfp, "%s", CurrentFileName);							else {								int outindex;								for(outindex=0; (outindex+agrep_outpointer<agrep_outlen) &&										(CurrentFileName[outindex] != '\0'); outindex++) {									agrep_outbuffer[agrep_outpointer+outindex] = CurrentFileName[outindex];								}								if ((CurrentFileName[outindex] != '\0') || (outindex+agrep_outpointer>=agrep_outlen)) {									OUTPUT_OVERFLOW;									free_buf(Text, buffer);									return -1;								}								agrep_outpointer += outindex;							}							if (PRINTFILETIME) {								char *s = aprint_file_time(CurrentFileTime);								if (agrep_finalfp != NULL)									fprintf(agrep_finalfp, "%s", s);								else {									int outindex;									for(outindex=0; (outindex+agrep_outpointer<agrep_outlen) &&											(s[outindex] != '\0'); outindex++) {										agrep_outbuffer[agrep_outpointer+outindex] = s[outindex];									}									if ((s[outindex] != '\0') || (outindex+agrep_outpointer>=agrep_outlen)) {										OUTPUT_OVERFLOW;										free_buf(Text, buffer);										return -1;									}									agrep_outpointer += outindex;								}							}							if (agrep_finalfp != NULL)								fprintf(agrep_finalfp, "\n");							else {								if (agrep_outpointer+1>=agrep_outlen) {									OUTPUT_OVERFLOW;									free_buf(Text, buffer);									return -1;								}								else agrep_outbuffer[agrep_outpointer++] = '\n';							}							free_buf(Text, buffer);							NEW_FILE = OFF;							return 0;						} 						if (-1 == r_output(buffer, i-1, end, j)) {free_buf(Text, buffer); return -1;}						if (((LIMITOUTPUT > 0) && (LIMITOUTPUT <= num_of_matched)) ||						    ((LIMITPERFILE > 0) && (LIMITPERFILE <= num_of_matched - prev_num_of_matched))) {							free_buf(Text, buffer);							return 0;	/* done */						}					}					lasti = i - 1;					r2 = Init0; 					r3 = (Next[r2] & CMask) | Init0;  /* match the newline */					if (DELIMITER) CurrentByteOffset += 1*D_length;					else CurrentByteOffset += 1*1;				}			} /* while */		/* If a residue is left for within-memory-buffer, since nothing can be "read" after that, we can ignore it: as if only 1 iteration of while */		return 0;	    }#endif	/*AGREP_POINTER*/	} /* end if(D==0) */#if	AGREP_POINTER	if (Text != -1) {#endif	/*AGREP_POINTER*/		while ((num_read = fill_buf(Text, buffer + Maxline, BlockSize)) > 0)		{			i=Maxline; 			end = Maxline+num_read;#if 0			/* pab: Don't do this here; it's done in bitap.fill_buf,			 * where we can handle eof on a block boundary right */			if((num_read < BlockSize) && buffer[end-1] != '\n') buffer[end++] = '\n';#endif /* 0 */			if(FIRST_TIME) {				buffer[i-1] = '\n';				i--;				CurrentByteOffset --;				FIRST_TIME = 0;			}			/* RE_PROCESS_WHEN_DNOTZERO: the while-loop below */			while (i < end)			{   				c = buffer[i++];				CurrentByteOffset ++;				CMask = RMask[c];				if (c != Newline)				{  					r_even = B[0];					r1 = Init1 & r_even;					A[0] = (Next[r_even] & CMask) | r1;					r_odd = B[1];					r1 = Init1 & r_odd;					r2 = (r_even | Next[r_even|A[0]]) &r_NO_ERR;					A[1] = (Next[r_odd] & CMask) | r2 | r1 ;  					if(D == 1) goto Nextcharfile;					r_even = B[2];					r1 = Init1 & r_even;					r2 = (r_odd | Next[r_odd|A[1]]) &r_NO_ERR;					A[2] = (Next[r_even] & CMask) | r2 | r1 ;  					if(D == 2) goto Nextcharfile;					r_odd = B[3];					r1 = Init1 & r_odd;					r2 = (r_even | Next[r_even|A[2]]) &r_NO_ERR;					A[3] = (Next[r_odd] & CMask) | r2 | r1 ;  					if(D == 3) goto Nextcharfile;					r_even = B[4];					r1 = Init1 & r_even;					r2 = (r_odd | Next[r_odd|A[3]]) &r_NO_ERR;					A[4] = (Next[r_even] & CMask) | r2 | r1 ;  					goto Nextcharfile;				} /* if NOT Newline */				else {  					j++;					if (DELIMITER) CurrentByteOffset -= D_length;					else CurrentByteOffset -= 1;					r1 = Init1 & B[D];               /* match endofline */					A[D] = (Next[B[D]] & CMask) | r1;					if(TAIL) A[D] = Next[A[D]] | A[D];					if((A[D] & 1) ^ INVERSE )  {						if(FILENAMEONLY && (NEW_FILE || !POST_FILTER)) {							num_of_matched++;    							if (agrep_finalfp != NULL)								fprintf(agrep_finalfp, "%s", CurrentFileName);							else {								int outindex;								for(outindex=0; (outindex+agrep_outpointer<agrep_outlen) &&										(CurrentFileName[outindex] != '\0'); outindex++) {									agrep_outbuffer[agrep_outpointer+outindex] = CurrentFileName[outindex];								}								if ((CurrentFileName[outindex] != '\0') || (outindex+agrep_outpointer>=agrep_outlen)) {									OUTPUT_OVERFLOW;									free_buf(Text, buffer);									return -1;								}								agrep_outpointer += outindex;							}							if (PRINTFILETIME) {								char *s = aprint_file_time(CurrentFileTime);								if (agrep_finalfp != NULL)									fprintf(agrep_finalfp, "%s", s);								else {									int outindex;									for(outindex=0; (outindex+agrep_outpointer<agrep_outlen) &&											(s[outindex] != '\0'); outindex++) {										agrep_outbuffer[agrep_outpointer+outindex] = s[outindex];									}									if ((s[outindex] != '\0') || (outindex+agrep_outpointer>=agrep_outlen)) {										OUTPUT_OVERFLOW;										free_buf(Text, buffer);										return -1;									}									agrep_outpointer += outindex;								}							}							if (agrep_finalfp != NULL)								fprintf(agrep_finalfp, "\n");							else {								if (agrep_outpointer+1>=agrep_outlen) {									OUTPUT_OVERFLOW;									free_buf(Text, buffer);									return -1;								}								else agrep_outbuffer[agrep_outpointer++] = '\n';							}							free_buf(Text, buffer);							NEW_FILE = OFF;							return 0;						}  						if (-1 == r_output(buffer, i-1, end, j)) {free_buf(Text, buffer); return -1;}						if (((LIMITOUTPUT > 0) && (LIMITOUTPUT <= num_of_matched)) ||						    ((LIMITPERFILE > 0) && (LIMITPERFILE <= num_of_matched - prev_num_of_matched))) {							free_buf(Text, buffer);							return 0;	/* done */						}					}					for(k=0; k<= D; k++) { 						A[k] = B[k] = Init[k]; 					}					r1 = Init1 & B[0]; 					A[0] = (Next[B[0]] & CMask) | r1;					for(k=1; k<= D; k++) {						r1 = Init1 & B[k];						r2 = (B[k-1] | Next[A[k-1]|B[k-1]]) &r_NO_ERR;						A[k] = (Next[B[k]] & CMask) | r1 | r2;					}					if (DELIMITER) CurrentByteOffset += 1*D_length;					else CurrentByteOffset += 1*1;				}	Nextcharfile: 				c = buffer[i];				CMask = RMask[c];				if(c != Newline)				{ 					r1 = Init1 & A[0];					B[0] = (Next[A[0]] & CMask) | r1;					r1 = Init1 & A[1];					B[1] = (Next[A[1]] & CMask) | ((A[0] | Next[A[0] | B[0]]) & r_NO_ERR) | r1 ;  					if(D == 1) goto Nextchar1file;					r1 = Init1 & A[2];					B[2] = (Next[A[2]] & CMask) | ((A[1] | Next[A[1] | B[1]]) &r_NO_ERR) | r1 ;  					if(D == 2) goto Nextchar1file;					r1 = Init1 & A[3];					B[3] = (Next[A[3]] & CMask) | ((A[2] | Next[A[2] | B[2]])&r_NO_ERR) | r1 ;  					if(D == 3) goto Nextchar1file;					r1 = Init1 & A[4];					B[4] = (Next[A[4]] & CMask) | ((A[3] | Next[A[3] | B[3]])&r_NO_ERR) | r1 ;  					goto Nextchar1file;				} /* if(NOT Newline) */				else {  					j++;					if (DELIMITER) CurrentByteOffset -= D_length;					else CurrentByteOffset -= 1;					r1 = Init1 & A[D];               /* match endofline */					B[D] = (Next[A[D]] & CMask) | r1;					if(TAIL) B[D] = Next[B[D]] | B[D];					if((B[D] & 1) ^ INVERSE )  {						if(FILENAMEONLY && (NEW_FILE || !POST_FILTER)) {							num_of_matched++;							if (agrep_finalfp != NULL)								fprintf(agrep_finalfp, "%s", CurrentFileName);							else {								int outindex;								for(outindex=0; (outindex+agrep_outpointer<agrep_outlen) &&										(CurrentFileName[outindex] != '\0'); outindex++) {									agrep_outbuffer[agrep_outpointer+outindex] = CurrentFileName[outindex];								}								if ((CurrentFileName[outindex] != '\0') || (outindex+agrep_outpointer>=agrep_outlen)) {									OUTPUT_OVERFLOW;									free_buf(Text, buffer);									return -1;								}								agrep_outpointer += outindex;							}							if (PRINTFILETIME) {								char *s = aprint_file_time(CurrentFileTime);								if (agrep_finalfp != NULL)									fprintf(agrep_finalfp, "%s", s);								else {									int outindex;									for(outindex=0; (outindex+agrep_outpointer<agrep_outlen) &&											(s[outindex] != '\0'); outindex++) {										agrep_outbuffer[agrep_outpointer+outindex] = s[outindex];									}									if ((s[outindex] != '\0') || (outindex+agrep_outpointer>=agrep_outlen)) {										OUTPUT_OVERFLOW;										free_buf(Text, buffer);										return -1;									}									agrep_outpointer += outindex;								}							}							if (agrep_finalfp != NULL)								fprintf(agrep_finalfp, "\n");							else {								if (agrep_outpointer+1>=agrep_outlen) {									OUTPUT_OVERFLOW;									free_buf(Text, buffer);									return -1;								}								else agrep_outbuffer[agrep_outpointer++] = '\n';							}							free_buf(Text, buffer);							NEW_FILE = OFF;							return 0;						} 						if (-1 == r_output(buffer, i, end, j)) {free_buf(Text, buffer); return -1;}						if (((LIMITOUTPUT > 0) && (LIMITOUTPUT <= num_of_matched)) ||						    ((LIMITPERFILE > 0) && (LIMITPERFILE <= num_of_matched - prev_num_of_matched))) {							free_buf(Text, buffer);							return 0;	/* done */						}					}					for(k=0; k<= D; k++) { 						A[k] = B[k] = Init[k]; 					}					r1 = Init1 & A[0]; 					B[0] = (Next[A[0]] & CMask) | r1;					for(k=1; k<= D; k++) {						r1 = Init1 & A[k];						r2 = (A[k-1] | Next[A[k-1]|B[k-1]])&r_NO_ERR;						B[k] = (Next[A[k]] & CMask) | r1 | r2;					}					if (DELIMITER) CurrentByteOffset += 1*D_length;					else CurrentByteOffset += 1*1;				}	Nextchar1file: 				i++;				CurrentByteOffset ++;			} /* while i < end */			strncpy(buffer, buffer+num_read, Maxline);		} /* while  fill_buf() */		free_buf(Text, buffer);		return 0;#if	AGREP_POINTER	}	else {		num_read = agrep_inlen;		buffer = (CHAR *)agrep_inbuffer;		end = num_read;		/* buffer[end-1] = '\n';*/ /* at end of the text. */		/* buffer[0] = '\n';*/  /* in front of the  text. */		i = 0;			/* An exact copy of the above RE_PROCESS

⌨️ 快捷键说明

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