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

   { int j, k, m, skip[MAXCHAR], d[MAXPATLEN];

     m = strlen(pat);
     if( m == 0 ) return( text );
     preprocpat( pat, skip, d );

     for( k=m-1; k<n; k += max(skip[text[k] &(MAXCHAR-1)],d[j])) {
           for( j=m-1; j >= 0 && text[k] == pat[j]; j-- ) k--;
           if( j ==(-1) ) return( text+k+1 );
           }
     return( NULL );
   }
