Annotation of coherent/a/usr/man/MULTI/bsearch, revision 1.1

1.1     ! root        1: 
        !             2: 
        !             3: bsearch()                General Function               bsearch()
        !             4: 
        !             5: 
        !             6: 
        !             7: 
        !             8: Search an array
        !             9: 
        !            10: #iinncclluuddee <ssttddlliibb.hh>
        !            11: cchhaarr *bbsseeaarrcchh(_k_e_y, _a_r_r_a_y, _n_u_m_b_e_r, _s_i_z_e, _c_o_m_p_a_r_i_s_o_n)
        !            12: cchhaarr *_k_e_y, *_a_r_r_a_y;
        !            13: ssiizzee_tt _n_u_m_b_e_r, _s_i_z_e;
        !            14: iinntt (*_c_o_m_p_a_r_i_s_o_n)();
        !            15: 
        !            16: bbsseeaarrcchh searches a sorted array for a given item.  _i_t_e_m points to
        !            17: the object sought.  _a_r_r_a_y points to the base of the array; it has
        !            18: _n_u_m_b_e_r elements, each of  which is _s_i_z_e bytes long.  Its elements
        !            19: must  be sorted  into ascending  order before  it is  searched by
        !            20: bbsseeaarrcchh.
        !            21: 
        !            22: _c_o_m_p_a_r_i_s_o_n points  to the function that  compares array elements.
        !            23: _c_o_m_p_a_r_i_s_o_n  must return  zero if  its  arguments match,  a number
        !            24: greater than  zero if the  element pointed to by  _a_r_g_1 is greater
        !            25: than the element pointed to by  _a_r_g_2, and a number less than zero
        !            26: if  the element  pointed  to by  _a_r_g_1  is less  than the  element
        !            27: pointed to by _a_r_g_2.
        !            28: 
        !            29: bbsseeaarrcchh returns a pointer to the array element that matches _i_t_e_m.
        !            30: If no  element matches _i_t_e_m, then bbsseeaarrcchh  returns NULL.  If more
        !            31: than  one element  within _a_r_r_a_y  matches  _i_t_e_m, which  element is
        !            32: matched is unspecified.
        !            33: 
        !            34: ***** Example *****
        !            35: 
        !            36: This example uses bbsseeaarrcchh to translate English into ``bureaucrat-
        !            37: ese''.
        !            38: 
        !            39: 
        !            40: #include <stdio.h>
        !            41: #include <stdlib.h>
        !            42: #include <string.h>
        !            43: 
        !            44: 
        !            45: 
        !            46: struct syntab {
        !            47:         char *english, *bureaucratic;
        !            48: } cdtab[] = {
        !            49: /* The left column is in alphabetical order */
        !            50: 
        !            51: 
        !            52: 
        !            53:     "affect",  "impact",
        !            54:     "after",   "subsequent to",
        !            55:     "building","physical facility",
        !            56:     "call",    "refer to as",
        !            57:     "do",      "implement",
        !            58: 
        !            59: 
        !            60: 
        !            61: 
        !            62: 
        !            63: 
        !            64: COHERENT Lexicon                                           Page 1
        !            65: 
        !            66: 
        !            67: 
        !            68: 
        !            69: bsearch()                General Function               bsearch()
        !            70: 
        !            71: 
        !            72: 
        !            73:     "false",   "inoperative",
        !            74:     "finish",  "finalize",
        !            75:     "first",   "initial",
        !            76:     "full",    "in-depth",
        !            77:     "help",    "facilitate",
        !            78: 
        !            79: 
        !            80: 
        !            81:     "kill",    "terminate",
        !            82:     "lie",     "inoperative statement",
        !            83:     "order",   "prioritize",
        !            84:     "talk",    "interpersonal communication",
        !            85:     "then",    "at that point in time",
        !            86:     "use",     "utilize"
        !            87: };
        !            88: 
        !            89: 
        !            90: 
        !            91: int
        !            92: comparator(key, item)
        !            93: char *key;
        !            94: struct syntab *item;
        !            95: {
        !            96:     return(strcmp(key, item->english));
        !            97: }
        !            98: 
        !            99: 
        !           100: 
        !           101: main()
        !           102: {
        !           103:     struct syntab *ans;
        !           104:     char buf[80];
        !           105: 
        !           106: 
        !           107: 
        !           108:     for(;;) {
        !           109:                printf("Enter an English word: ");
        !           110:                fflush(stdout);
        !           111: 
        !           112: 
        !           113: 
        !           114:                if(gets(buf) || !strcmp(buf, "quit") == NULL)
        !           115:                break;
        !           116: 
        !           117: 
        !           118: 
        !           119:                if((ans = bsearch(buf, (char *)cdtab,
        !           120:                 sizeof(cdtab)/ sizeof(struct syntab),
        !           121:                 sizeof(struct syntab),
        !           122:                 comparator)) == NULL)
        !           123:                printf("%s not found\n");
        !           124: 
        !           125: 
        !           126: 
        !           127: 
        !           128: 
        !           129: 
        !           130: COHERENT Lexicon                                           Page 2
        !           131: 
        !           132: 
        !           133: 
        !           134: 
        !           135: bsearch()                General Function               bsearch()
        !           136: 
        !           137: 
        !           138: 
        !           139:                else
        !           140:                printf("Don't say \"%s\"; say \"%s\"!\n",
        !           141:                 ans->english, ans->bureaucratic);
        !           142:     }
        !           143: }
        !           144: 
        !           145: 
        !           146: ***** See Also *****
        !           147: 
        !           148: ggeenneerraall ffuunnccttiioonnss, qqssoorrtt(), ssttddlliibb.hh
        !           149: 
        !           150: ***** Notes *****
        !           151: 
        !           152: The  name bbsseeaarrcchh  implies that this  function performs  a binary
        !           153: search.  A binary search looks  at the midpoint of the array, and
        !           154: compares  it with  the  element being  sought.   If that  element
        !           155: matches, then  the work  is done.  If  it does not,  then bbsseeaarrcchh
        !           156: checks the midpoint  of either the upper half of  the array or of
        !           157: the lower half, depending  upon whether the midpoint of the array
        !           158: is larger or smaller than the item being sought.  bbsseeaarrcchh bisects
        !           159: smaller and smaller regions of  the array until it either finds a
        !           160: match or can bisect no further.
        !           161: 
        !           162: It is  important that the input _a_r_r_a_y be  sorted, or bbsseeaarrcchh will
        !           163: not function correctly.
        !           164: 
        !           165: 
        !           166: 
        !           167: 
        !           168: 
        !           169: 
        !           170: 
        !           171: 
        !           172: 
        !           173: 
        !           174: 
        !           175: 
        !           176: 
        !           177: 
        !           178: 
        !           179: 
        !           180: 
        !           181: 
        !           182: 
        !           183: 
        !           184: 
        !           185: 
        !           186: 
        !           187: 
        !           188: 
        !           189: 
        !           190: 
        !           191: 
        !           192: 
        !           193: 
        !           194: 
        !           195: 
        !           196: COHERENT Lexicon                                           Page 3
        !           197: 
        !           198: 

unix.superglobalmegacorp.com

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