Path: tut!enea!mcvax!uunet!seismo!sundc!pitstop!sun!amdcad!ames!mailrus!cornell!uw-beaver!ssc-vax!uvicctr!tholm
From: tholm@uvicctr.UUCP (Terrence W. Holm)
Newsgroups: comp.os.minix
Subject: bsearch(3)
Message-ID: <474@uvicctr.UUCP>
Date: 26 Aug 88 00:06:32 GMT
Reply-To: tholm@uvicctr.UUCP (Terrence W. Holm)
Organization: University of Victoria, Victoria B.C. Canada
Lines: 97
EFTH MINIX report #30 - August 1988 - bsearch(3)
There follows an implementation of bsearch(3) for
Minix. Please consider this public domain software.
A "man" page is included.
----------------------------------------------------------
echo x - bsearch.3
gres '^X' '' > bsearch.3 << '/'
XSUBROUTINES
X bsearch(3) - in core binary search
X
XINVOCATION
X char *bsearch( key, base, count, width, keycmp )
X char *key;
X char *base;
X unsigned int count;
X unsigned int width;
X int (*keycmp)();
X
XEXPLANATION
X Performs a binary search for a given within a sorted
X table. The table contains entries of size
X and starts at .
X
X Entries are compared using keycmp( key, entry ), each argument
X is a (char *), the function returns an int < 0, = 0 or > 0
X according to the order of the two arguments.
X
XRESULTS
X Bsearch(3) returns a pointer to the matching entry, if found,
X otherwise NULL is returned.
/
echo x - bsearch.c
gres '^X' '' > bsearch.c << '/'
X/* bsearch(3)
X *
X * Author: Terrence Holm Aug. 1988
X *
X *
X * Performs a binary search for a given within a sorted
X * table. The table contains entries of size
X * and starts at .
X *
X * Entries are compared using keycmp( key, entry ), each argument
X * is a (char *), the function returns an int < 0, = 0 or > 0
X * according to the order of the two arguments.
X *
X * Bsearch(3) returns a pointer to the matching entry, if found,
X * otherwise NULL is returned.
X */
X
X#define NULL (char *) 0
X
X
Xchar *bsearch( key, base, count, width, keycmp )
X char *key;
X char *base;
X unsigned int count;
X unsigned int width;
X int (*keycmp)();
X
X {
X char *mid_point;
X int cmp;
X
X while ( count > 0 )
X {
X mid_point = base + width * (count >> 1);
X
X cmp = keycmp( key, mid_point );
X
X if ( cmp == 0 )
X return( mid_point );
X
X if ( cmp < 0 )
X count >>= 1;
X else
X {
X base = mid_point + width;
X count = (count - 1) >> 1;
X }
X }
X
X return( NULL );
X }
/
----------------------------------------------------------
Edwin L. Froese
uw-beaver!ubc-cs!mprg!handel!froese
Terrence W. Holm
uw-beaver!uvicctr!tholm