123456789101112131415161718192021222324252627282930313233343536373839404142 |
- /*
- * This file lifted in toto from 'Dlibs' on the atari ST (RdeBath)
- *
- *
- * Dale Schumacher 399 Beacon Ave.
- * (alias: Dalnefre') St. Paul, MN 55104
- * dal@syntel.UUCP United States of America
- * "It's not reality that's important, but how you perceive things."
- */
- #include <stdio.h>
- static int _bsearch; /* index of element found, or where to
- * insert */
- char *bsearch(key, base, num, size, cmp)
- register char *key; /* item to search for */
- register char *base; /* base address */
- int num; /* number of elements */
- register int size; /* element size in bytes */
- register int (*cmp) (); /* comparison function */
- {
- register int a, b, c, dir;
- a = 0;
- b = num - 1;
- while (a <= b) {
- c = (a + b) >> 1; /* == ((a + b) / 2) */
- if ((dir = (*cmp) (key, (base + (c * size))))) {
- if (dir < 0)
- b = c - 1;
- else /* (dir > 0) */
- a = c + 1;
- } else {
- _bsearch = c;
- return (base + (c * size));
- }
- }
- _bsearch = b;
- return (NULL);
- }
|