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