Annotation of 43BSDTahoe/new/bib/src/makekey.c, revision 1.1.1.1

1.1       root        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: }
                     79: 

unix.superglobalmegacorp.com

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