Annotation of 43BSD/contrib/bib/src/makekey.c, revision 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.