#define B 131

     char *search( pat, text )
     char *pat, *text;

     { int hpat, htext, Bm, j, m;

       if( pat[0]==EOS ) return( text );
       Bm = 1;
       hpat = htext = 0;

       for( m=0; text[m] != EOS && pat[m] != EOS; m++ ) {
            Bm *= B;
            hpat = hpat*B + pat[m];
            htext = htext*B + text[m];
            }

       if( text[m]==EOS && pat[m]!=EOS ) return( NULL );

       for( j=m; TRUE; j++ ) {
            if( hpat==htext && strncmp(text+j-m,pat,m)==0 )
                 return( text+j-m );
            if( text[j]==EOS ) return( NULL );
            htext = htext*B - text[j-m]*Bm + text[j];
            }
     }
