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

📄 agrep.c

📁 harvest是一个下载html网页得机器人
💻 C
📖 第 1 页 / 共 5 页
字号:
				CurrentByteOffset --;				FIRST_TIME = 0;			}			/* RE1_PROCESS_WHEN_DNOTZERO: the while loop below */			while (i < end )			{				c = buffer[i];				CMask = Mask[c];				if(c !=  Newline)				{					if(CMask != 0) {  						r2 = B[0];						r1 = Init1 & r2;						A[0] = ((Next[r2>>hh] | Next1[r2&LL]) & CMask) | r1;						r3 = B[1];						r1 = Init1 & r3;						r0 = r2 | A[0];     /* A[0] | B[0] */						A[1] = ((Next[r3>>hh] | Next1[r3&LL]) & CMask) | (( r2 | Next[r0>>hh] | Next1[r0&LL])&r_NO_ERR) | r1 ;  						if(D == 1) goto Nextcharfile;						r2 = B[2];						r1 = Init1 & r2;						r0 = r3 | A[1];						A[2] = ((Next[r2>>hh] | Next1[r2&LL]) & CMask) | ((r3 | Next[r0>>hh] | Next1[r0&LL])&r_NO_ERR) | r1 ;  						if(D == 2) goto Nextcharfile;						r3 = B[3];						r1 = Init1 & r3;						r0 = r2 | A[2];						A[3] = ((Next[r3>>hh] | Next1[r3&LL]) & CMask) | ((r2 | Next[r0>>hh] | Next1[r0&LL])&r_NO_ERR) | r1 ;  						if(D == 3) goto Nextcharfile;						r2 = B[4];						r1 = Init1 & r2;						r0 = r3 | A[3];						A[4] = ((Next[r2>>hh] | Next1[r2&LL]) & CMask) | ((r3 | Next[r0>>hh] | Next1[r0&LL])&r_NO_ERR) | r1 ;  						if(D == 4)  goto Nextcharfile;					}  /* if(CMask) */					else  {						r2 = B[0];						A[0] = r2 & Init1; 						r3 = B[1];						r1 = Init1 & r3;						r0 = r2 | A[0];						A[1] = ((r2 | Next[r0>>hh] | Next1[r0&LL])&r_NO_ERR) | r1 ;  						if(D == 1) goto Nextcharfile;						r2 = B[2];						r1 = Init1 & r2;						r0 = r3 | A[1];						A[2] = ((r3 | Next[r0>>hh] | Next1[r0&LL])&r_NO_ERR) | r1 ;  						if(D == 2) goto Nextcharfile;						r3 = B[3];						r1 = Init1 & r3;						r0 = r2 | A[2];						A[3] = ((r2 | Next[r0>>hh] | Next1[r0&LL])&r_NO_ERR) | r1 ;  						if(D == 3) goto Nextcharfile;						r2 = B[4];						r1 = Init1 & r2;						r0 = r3 | A[3];						A[4] = ((r3 | Next[r0>>hh] | Next1[r0&LL])&r_NO_ERR) | r1 ;  						if(D == 4) goto Nextcharfile;					}				}				else {  					j++;					if (DELIMITER) CurrentByteOffset -= D_length;					else CurrentByteOffset -= 1;					r1 = Init1 & B[D];            /* match against endofline */					A[D] = ((Next[B[D]>>hh] | Next1[B[D]&LL]) & CMask) | r1;					if(TAIL) A[D] = ( Next[A[D]>>hh] | Next1[A[D]&LL] ) | A[D]; 					/* epsilon move */					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, 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++)  B[k] = Init[0];					r1 = Init1 & B[0];					A[0] = (( Next[B[0]>>hh] | Next1[B[0]&LL]) & CMask) | r1;					for(k=1; k<=D; k++) {						r3 = B[k];						r1 = Init1 & r3;						r2 = A[k-1] | B[k-1];						A[k] = ((Next[r3>>hh] | Next1[r3&LL]) & CMask) | ((B[k-1] | Next[r2>>hh] | Next1[r2&LL]) & r_NO_ERR) | r1;					}					if (DELIMITER) CurrentByteOffset += 1*D_length;					else CurrentByteOffset += 1*1;				}	Nextcharfile: 				i=i+1;				CurrentByteOffset ++;				c = buffer[i];				CMask = Mask[c];				if(c != Newline)				{					if(CMask != 0) {  						r2 = A[0];						r1 = Init1 & r2;						B[0] = ((Next[r2>>hh] | Next1[r2&LL]) & CMask) | r1;						r3 = A[1];						r1 = Init1 & r3;						r0 = B[0] | r2;						B[1] = ((Next[r3>>hh] | Next1[r3&LL]) & CMask) | ((r2 | Next[r0>>hh] | Next1[r0&LL]) & r_NO_ERR) | r1 ;  						if(D == 1) goto Nextchar1file;						r2 = A[2];						r1 = Init1 & r2;						r0 = B[1] | r3;						B[2] = ((Next[r2>>hh] | Next1[r2&LL]) & CMask) | ((r3 | Next[r0>>hh] | Next1[r0&LL])&r_NO_ERR) | r1 ;  						if(D == 2) goto Nextchar1file;						r3 = A[3];						r1 = Init1 & r3;						r0 = B[2] | r2;						B[3] = ((Next[r3>>hh] | Next1[r3&LL]) & CMask) | ((r2 | Next[r0>>hh] | Next1[r0&LL])&r_NO_ERR) | r1 ;  						if(D == 3) goto Nextchar1file;						r2 = A[4];						r1 = Init1 & r2;						r0 = B[3] | r3;						B[4] = ((Next[r2>>hh] | Next1[r2&LL]) & CMask) | ((r3 | Next[r0>>hh] | Next1[r0&LL])&r_NO_ERR) | r1 ;  						if(D == 4)   goto Nextchar1file;					}  /* if(CMask) */					else  {						r2 = A[0];						B[0] = r2 & Init1; 						r3 = A[1];						r1 = Init1 & r3;						r0 = B[0] | r2;						B[1] = ((r2 | Next[r0>>hh] | Next1[r0&LL])&r_NO_ERR) | r1 ;  						if(D == 1) goto Nextchar1file;						r2 = A[2];						r1 = Init1 & r2;						r0 = B[1] | r3;						B[2] = ((r3 | Next[r0>>hh] | Next1[r0&LL])&r_NO_ERR) | r1 ;  						if(D == 2) goto Nextchar1file;						r3 = A[3];						r1 = Init1 & r3;						r0 = B[2] | r2;						B[3] = ((r2 | Next[r0>>hh] | Next1[r0&LL])&r_NO_ERR) | r1 ;  						if(D == 3) goto Nextchar1file;						r2 = A[4];						r1 = Init1 & r2;						r0 = B[3] | r3;						B[4] = ((r3 | Next[r0>>hh] | Next1[r0&LL])&r_NO_ERR) | r1 ;  						if(D == 4) goto Nextchar1file;					}				} /* if(NOT Newline) */				else {  					j++;					if (DELIMITER) CurrentByteOffset -= D_length;					else CurrentByteOffset -= 1;					r1 = Init1 & A[D];            /* match against endofline */					B[D] = ((Next[A[D]>>hh] | Next1[A[D]&LL]) & CMask) | r1;					if(TAIL) B[D] = ( Next[B[D]>>hh] | Next1[B[D]&LL] ) | B[D]; 					/* epsilon move */					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] = Init0; 					r1 = Init1 & A[0];					B[0] = ((Next[A[0]>>hh] | Next1[A[0]&LL]) & CMask) | r1;					for(k=1; k<=D; k++) {						r3 = A[k];						r1 = Init1 & r3;						r2 = A[k-1] | B[k-1];						B[k] = ((Next[r3>>hh] | Next1[r3&LL]) & CMask) | ((A[k-1] | Next[r2>>hh] | Next1[r2&LL]) & r_NO_ERR) | r1;					}					if (DELIMITER) CurrentByteOffset += 1*D_length;					else CurrentByteOffset += 1*1;				}	Nextchar1file: 				i=i+1;				CurrentByteOffset ++;			} /* while i < end */			strncpy(buffer, buffer+num_read, Maxline);		} /* while fill_buf... */		free_buf(Text, buffer);		return 0;#if	AGREP_POINTER	}	else {	/* within the memory buffer: assume it starts with a newline at position 0, the actual pattern follows that, and it ends with a '\n' */		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 RE1_PROCESS_WHEN_DNOTZERO: the while loop below */			while (i < end )			{				c = buffer[i];				CMask = Mask[c];				if(c !=  Newline)				{					if(CMask != 0) {  						r2 = B[0];						r1 = Init1 & r2;						A[0] = ((Next[r2>>hh] | Next1[r2&LL]) & CMask) | r1;						r3 = B[1];						r1 = Init1 & r3;						r0 = r2 | A[0];     /* A[0] | B[0] */						A[1] = ((Next[r3>>hh] | Next1[r3&LL]) & CMask) | (( r2 | Next[r0>>hh] | Next1[r0&LL])&r_NO_ERR) | r1 ;  						if(D == 1) goto Nextcharmem;						r2 = B[2];						r1 = Init1 & r2;						r0 = r3 | A[1];						A[2] = ((Next[r2>>hh] | Next1[r2&LL]) & CMask) | ((r3 | Next[r0>>hh] | Next1[r0&LL])&r_NO_ERR) | r1 ;  						if(D == 2) goto Nextcharmem;						r3 = B[3];						r1 = Init1 & r3;						r0 = r2 | A[2];						A[3] = ((Next[r3>>hh] | Next1[r3&LL]) & CMask) | ((r2 | Next[r0>>hh] | Next1[r0&LL])&r_NO_ERR) | r1 ;  						if(D == 3) goto Nextcharmem;						r2 = B[4];						r1 = Init1 & r2;						r0 = r3 | A[3];						A[4] = ((Next[r2>>hh] | Next1[r2&LL]) & CMask) | ((r3 | Next[r0>>hh] | Next1[r0&LL])&r_NO_ERR) | r1 ;  						if(D == 4)  goto Nextcharmem;					}  /* if(CMask) */					else  {						r2 = B[0];						A[0] = r2 & Init1; 						r3 = B[1];						r1 = Init1 & r3;						r0 = r2 | A[0];						A[1] = ((r2 | Next[r0>>hh] | Next1[r0&LL])&r_NO_ERR) | r1 ;  						if(D == 1) goto Nextcharmem;						r2 = B[2];						r1 = Init1 & r2;						r0 = r3 | A[1];						A[2] = ((r3 | Next[r0>>hh] | Next1[r0&LL])&r_NO_ERR) | r1 ;  						if(D == 2) goto Nextcharmem;						r3 = B[3];						r1 = Init1 & r3;						r0 = r2 | A[2];						A[3] = ((r2 | Next[r0>>hh] | Next1[r0&LL])&r_NO_ERR) | r1 ;  						if(D == 3) goto Nextcharmem;						r2 = B[4];						r1 = Init1 & r2;						r0 = r3 | A[3];						A[4] = ((r3 | Next[r0>>hh] | Next1[r0&LL])&r_NO_ERR) | r1 ;  						if(D == 4) goto Nextcharmem;					}				}				else {  					j++;					if (DELIMITER) CurrentByteOffset -= D_length;					else CurrentByteOffset -= 1;					r1 = Init1 & B[D];            /* match against endofline */					A[D] = ((Next[B[D]>>hh] | Next1[B[D]&LL]) & CMask) | r1;					if(TAIL) A[D] = ( Next[A[D]>>hh] | Next1[A[D]&LL] ) | A[D]; 					/* epsilon move */					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;						} 

⌨️ 快捷键说明

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