Annotation of 43BSD/contrib/spms/src/bin/pfind/binary.c, revision 1.1.1.1

1.1       root        1: /* $Header$ */
                      2: 
                      3: /*
                      4:  * Author: Peter J. Nicklin
                      5:  */
                      6: #include "yesno.h"
                      7: 
                      8: static char **STRINGS;                 /* pointer array containing strings */
                      9: static int NSTRINGS;                   /* number of strings in STRINGS */
                     10: 
                     11: /*
                     12:  * bininit() initializes and sorts the STRINGS pointer array.
                     13:  */
                     14: void
                     15: bininit(argc, argv)
                     16:        int argc;
                     17:        char **argv;
                     18: {
                     19:        int qsort();                    /* quicker sort */
                     20:        int strpcmp();                  /* pointed-to string comparison */
                     21: 
                     22:        NSTRINGS = argc;
                     23:        STRINGS = argv;
                     24:        qsort((char *) STRINGS, NSTRINGS, sizeof(char *), strpcmp);
                     25: }
                     26: 
                     27: 
                     28: 
                     29: /*
                     30:  * binsearch() returns integer YES if string is found in sorted pointer
                     31:  * array STRINGS, otherwise NO. Uses binary search.
                     32:  */
                     33: binsearch(string)
                     34:        char *string;                   /* string to be matched */
                     35: {
                     36:        int comp;                       /* compare string values */
                     37:        int high;                       /* upper limit of array */
                     38:        int low;                        /* lower limit of array */
                     39:        int mid;                        /* middle of search range */
                     40:        int strcmp();                   /* string comparison */
                     41: 
                     42:        low = 0;
                     43:        high = NSTRINGS - 1;
                     44:        while (low <= high)
                     45:                {
                     46:                mid = (low+high) / 2;
                     47:                if ((comp = strcmp(string, STRINGS[mid])) < 0)
                     48:                        high = mid - 1;
                     49:                else if (comp > 0)
                     50:                        low = mid + 1;
                     51:                else
                     52:                        return(YES);
                     53:                }
                     54:        return(NO);
                     55: }
                     56: 
                     57: 
                     58: 
                     59: /*
                     60:  * strpcmp() compares strings in a pointer array. Returns whatever strcmp()
                     61:  * returns.
                     62:  */
                     63: static int
                     64: strpcmp(s1, s2)
                     65:        char **s1;
                     66:        char **s2;
                     67: {
                     68:        int strcmp();                   /* string comparison */
                     69: 
                     70:        return(strcmp(*s1, *s2));
                     71: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.