?? agrep.c
字號(hào):
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
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -