This is bsearch.c in view mode; [Download] [Up]
char *
bsearch(key,base,nel,keysize,compar)
char *key,*base;
unsigned int nel,keysize;
int (*compar)();
{
char *beg=base;
char *end=base+keysize*(nel-1);
char *mid;
int cmp,tem;
top:
if (nel==0) return 0;
cmp=(*compar)(beg,key);
if (cmp==0) return beg;
if (cmp> 0) return 0;
cmp= (*compar)(key,end);
if (cmp==0) return end;
if (cmp> 0)return 0;
/* key is in range from here on */
start:
if (nel<=2) return 0;
tem=nel;
nel=nel/2;
mid=beg+(nel)*keysize;
cmp= (*compar)(key,mid);
if (cmp==0) return mid;
if (cmp< 0) {end=mid; nel++;
goto start;;
}
beg=mid;
nel=tem-(nel);
goto start;
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.