/* So einfach ist der extrem leistungsfähige
 * Boyer-Moore-Algorithmus zu implementieren
 */

extern long Skip[];

long BM_Search(unsigned char *Puffer,
               unsigned char *Pattern,
               long size)
{
  long i,j,M=strlen(Pattern),N=size,t;

  for( i=M-1,j=M-1; j>=0; i--, j-- ) {
    while( Puffer[i] != Pattern[j] ) {
      t=Skip[Puffer[i]];
      i+=(M-j>t)?M-j:t;
      if( i>=N )
        return N;
      j=M-1;
    }
    M=strlen(Pattern);
  }
  return i;
}
