Annotation of 40BSD/cmd/ratfor/rlook.c, revision 1.1.1.1

1.1       root        1: #define NULL 0
                      2: #define EOS 0
                      3: #define        HSHSIZ  101
                      4: struct nlist {
                      5:        char    *name;
                      6:        char    *def;
                      7:        int     ydef;
                      8:        struct  nlist *next;
                      9: };
                     10: 
                     11: struct nlist   *hshtab[HSHSIZ];
                     12: struct nlist   *lookup();
                     13: char   *install();
                     14: char   *malloc();
                     15: char   *copy();
                     16: int    hshval;
                     17: 
                     18: struct nlist *lookup(str)
                     19: char *str;
                     20: {
                     21:        register char *s1, *s2;
                     22:        register struct nlist *np;
                     23:        static struct nlist nodef;
                     24: 
                     25:        s1 = str;
                     26:        for (hshval = 0; *s1; )
                     27:                hshval += *s1++;
                     28:        hshval %= HSHSIZ;
                     29:        for (np = hshtab[hshval]; np!=NULL; np = np->next) {
                     30:                s1 = str;
                     31:                s2 = np->name;
                     32:                while (*s1++ == *s2)
                     33:                        if (*s2++ == EOS)
                     34:                                return(np);
                     35:        }
                     36:        return(&nodef);
                     37: }
                     38: 
                     39: char *install(nam, val, tran)
                     40: char *nam, *val;
                     41: int tran;
                     42: {
                     43:        register struct nlist *np;
                     44: 
                     45:        if ((np = lookup(nam))->name == NULL) {
                     46:                np = (struct nlist *)malloc(sizeof(*np));
                     47:                np->name = copy(nam);
                     48:                np->def = copy(val);
                     49:                np->ydef = tran;
                     50:                np->next = hshtab[hshval];
                     51:                hshtab[hshval] = np;
                     52:                return(np->def);
                     53:        }
                     54:        free(np->def);
                     55:        np->def = copy(val);
                     56:        return(np->def);
                     57: }
                     58: 
                     59: char *copy(s)
                     60: register char *s;
                     61: {
                     62:        register char *p, *s1;
                     63: 
                     64:        p = s1 = (char *) malloc((unsigned)strlen(s)+1);
                     65:        while (*s1++ = *s++);
                     66:        return(p);
                     67: }

unix.superglobalmegacorp.com

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