Listing 6 Boyer-Moore-Horspool algorithm implementation

#include <stdio.h>
#define ALPHABETSZ 128
#define PATGRD 0xfe
#define TXTGRD 0xff
static int d[ALPHABETSZ];
void bmhInit(char *txt, int m, char *pat)
{
  int i;
  /* initialize */
  pat[0] = PATGRD;
  txt[0] = TXTGRD;
  for (i=0; i<ALPHABETSZ; i++)
    d[i] = m;
  for (i=1; i<m; i++)
    d[pat[i]] = m - i;
}
int bmhFind(int n, char *txt, int m,
          char *pat)
{
  int i, j, k;
  int nmatch = 0;
  i = m;
  while (i <= n) {
    k = i;
    for (j=m; txt[k] == pat[j]; j--)
       k--;
    if (j == 0) {
      nmatch++;
      printf("%d \n", k);
    }
    i += d[txt[i]];
  }
  return(nmatch);
}
/* End of File */