#include <stdlib.h>
#include "stdio.h"

/* sample compar function: int cmp(void *a,void *b){ return *(int *)a-*(int *)b; } */

void *bsearch
(const void *key,const void *base,size_t nmemb,size_t size,
 int (*compar)(const void *,const void *))
{ char *base2=(char *)base;
  size_t a=0;
  size_t b=nmemb;
  size_t c;
  int d;
  if(nmemb!=0)
    for(;;)
    { c=(a+b)/2;
      if((d=(*compar)(key,&base2[size*c]))==0)
        return &base2[size*c];
      if(c==a)
        break;
      if(d<0)
        b=c;
      else
        a=c;
    }
  return NULL;
}
