1: #ifndef lint
   2: static char sccsid[] = "@(#)makekey.c	2.2	9/23/83";
   3: #endif not lint
   4: #
   5: 
   6: # include "stdio.h"
   7: # include "ctype.h"
   8: # include "bib.h"
   9: 
  10: char    commlist[MAXCOMM]=   /*  list of strings of common words         */
  11:      "";
  12: int firsttime = 1;
  13: 
  14: /*  makekey(p,max_klen,common):  compresses *p into a key
  15:         folds upper to lower case.  ignores non-alphanumeric
  16:         drops keys of length <= 1.
  17:         drops words in common (name of file of words, one per line)
  18:             (first call determines common for all later calls)
  19: */
  20: makekey(p,max_klen,common)
  21: char *p;
  22: int  max_klen;          /* max key length */
  23: char *common;
  24: {   register char *from, *to, *stop;
  25: 
  26:     if (firsttime) {firsttime= 0; load_comm(common); }
  27: 
  28:     from= p; to= p; stop= max_klen+p;
  29:     while (*from != NULL  &&  to < stop)
  30:     {   if      (islower(*from))      *to++ = *from++;
  31:         else if (isdigit(*from))      *to++ = *from++;
  32:         else if (isupper(*from))    { *to++ = tolower(*from);  from++; }
  33:         else                          from++;
  34:     }
  35:     *to= NULL;
  36: 
  37:     if (to<=p+1 ||
  38:         lookup(commlist, p) )  *p= NULL;
  39: }
  40: 
  41: /*  list is a string of null terminated strings, final string is null.
  42:     p is a null terminated string.
  43:     return 1 if p is a string in list, 0 ow.
  44: */
  45: int lookup(list,p)
  46: char *list, *p;
  47: {   int len;
  48:     len= strlen(list);
  49:     while (len!=0 && strcmp(list,p)!=0)
  50:     {   list += (len+1);
  51:         len= strlen(list);
  52:     }
  53:     return(len!=0);
  54: }
  55: 
  56: /*  read file common into commlist
  57: */
  58: load_comm(common)
  59: char *common;
  60: {   FILE    *commfile;          /*  stream of common words                  */
  61:     char *p, *stop;
  62:     commfile= fopen(common,"r");
  63:     if (commfile==NULL) fprintf(stderr, "cannot open '%s'\n", common);
  64:     else
  65:     {   /* read commfile into commlist  */
  66:             p= commlist;    stop= commlist+MAXCOMM-1;
  67:             while (p<stop && ((*p= getc(commfile))!=EOF))
  68:             {   if (*p=='\n')   *p= NULL;
  69:                 p++;
  70:             }
  71:             if  (*p==EOF)  *p= NULL;
  72:             else
  73:             {   fprintf(stderr, "invert: too many common words\n");
  74:                 commlist[0]= NULL;
  75:             }
  76:         fclose(commfile);
  77:     }
  78: }

Defined functions

load_comm defined in line 58; used 1 times
  • in line 26
lookup defined in line 45; used 1 times
  • in line 38
makekey defined in line 20; used 2 times

Defined variables

commlist defined in line 10; used 4 times
firsttime defined in line 12; used 2 times
  • in line 26(2)
sccsid defined in line 2; never used
Last modified: 1983-10-07
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1018
Valid CSS Valid XHTML 1.0 Strict