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.