/* bsearch(3) * * Author: Terrence Holm Aug. 1988 * * * Performs a binary search for a given within a sorted * table. The table contains entries of size * and starts at . * * Entries are compared using keycmp( key, entry ), each argument * is a (char *), the function returns an int < 0, = 0 or > 0 * according to the order of the two arguments. * * Bsearch(3) returns a pointer to the matching entry, if found, * otherwise NULL is returned. */ #define NULL (char *) 0 char *bsearch( key, base, count, width, keycmp ) char *key; char *base; unsigned int count; unsigned int width; int (*keycmp)(); { char *mid_point; int cmp; while ( count > 0 ) { mid_point = base + width * (count >> 1); cmp = (*keycmp)( key, mid_point ); if ( cmp == 0 ) return( mid_point ); if ( cmp < 0 ) count >>= 1; else { base = mid_point + width; count = (count - 1) >> 1; } } return( NULL ); }