     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;
          }
    }
