?? agrep.c
字號:
/* 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\n", 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+1>=agrep_outlen)) {
OUTPUT_OVERFLOW;
free_buf(Text, buffer);
return -1;
}
else agrep_outbuffer[agrep_outpointer+outindex++] = '\n';
agrep_outpointer += outindex;
}
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\n", 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+1>=agrep_outlen)) {
OUTPUT_OVERFLOW;
free_buf(Text, buffer);
return -1;
}
else agrep_outbuffer[agrep_outpointer+outindex++] = '\n';
agrep_outpointer += outindex;
}
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\n", 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+1>=agrep_outlen)) {
OUTPUT_OVERFLOW;
free_buf(Text, buffer);
return -1;
}
else agrep_outbuffer[agrep_outpointer+outindex++] = '\n';
agrep_outpointer += outindex;
}
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;
}
Nextcharmem:
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 Nextchar1mem;
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 Nextchar1mem;
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 Nextchar1mem;
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 Nextchar1mem;
} /* 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 Nextchar1mem;
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 Nextchar1mem;
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 Nextchar1mem;
r2 = A[4];
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -