+
+#define ASIZE 256
+int bmsearch( char *pat, int m, char *text, int n, void *base, void *loc[] )
+{
+ int count = 0;
+ int i, j, k, skip[ASIZE];
+
+ if( m==0 ) return 0;
+ for( k=0; k<ASIZE; k++ ) skip[k] = m;
+ for( k=0; k<m-1; k++ ) skip[(int)pat[k]] = m-k-1;
+
+ for( k=m-1; k < n; k += skip[(int)text[k] & (ASIZE-1)] ) {
+ for( j=m-1, i=k; j>=0 && text[i] == pat[j]; j-- ) i--;
+ if( j == (-1) )
+ /* SAVE LOCATION */
+ loc[count++] = (void *)( base+i+1 );
+ //return( text+i+1 );
+ }
+ return count;
+}
+