    int search( pat, index, n )  
    char *pat, *index[];
    int n;                   /* size of the PAT array */

    { int m, left, right, low, high, i;

      m = strlen(pat);
      /* search left end */
      if( strncmp( pat, index[0], m ) != 1 ) left = 0;
      else if( strncmp( pat, index[n-1], m ) == 1 ) left = n;
      else {  /* binary search */
           for( low=0, high=n; high-low > 1; ) {
                i = (high+low)/2;
                if( strncmp( pat, index[i], m ) != 1 ) high = i;
                else     low = i;
           }
           left = high;
      }
      /* search right end */
      if( strncmp( pat, index[0], m ) == -1 ) right = -1;
      else if( strncmp( pat, index[n-1], m ) != -1 ) right = n-1;
      else {  /* binary search */
           for( low=0, high=n; high-low > 1; ) {
                i = (high+low)/2;
                if( strncmp( pat, index[i], m ) != -1 ) low = i;
                else     high = i;
           }
           right = low;
      }
      return( right-left+1 );
    }
