int extsearch( pat, filedesc ) char *pat; int filedesc; { int offs, i, m, nb, nr; char buff[BUFSIZ], *p; m = strlen(pat); if( m == 0 ) return( 0 ); if( m >= BUFSIZ ) return( -2 ); /*** Buffer is too small ***/ /*** Assume that the file is open and positioned ***/ offs = 0; /*** number of characters already read ***/ nb = 0; /*** number of characters in buffer ***/ while( TRUE ) { if( nb >= m ) { /*** try to match ***/ p = search(pat,buff); if( p != NULL ) return( p-buff+offs ); /*** found ***/ for( i=0; i < m; i++ ) buff[i] = buff[i+nb-m+1]; offs += nb-m+1; nb = m-1; } /*** read more text ***/ nr = read( filedesc, buff+nb, BUFSIZ-1-nb ); if( nr <= 0 ) return( -1 ); /*** not found ***/ nb += nr; buff[nb] = EOS; } }