Annotation of 42BSD/usr.lib/sendmail/src/stab.c, revision 1.1.1.1

1.1       root        1: # include "sendmail.h"
                      2: 
                      3: SCCSID(@(#)stab.c      4.1             7/25/83);
                      4: 
                      5: /*
                      6: **  STAB -- manage the symbol table
                      7: **
                      8: **     Parameters:
                      9: **             name -- the name to be looked up or inserted.
                     10: **             type -- the type of symbol.
                     11: **             op -- what to do:
                     12: **                     ST_ENTER -- enter the name if not
                     13: **                             already present.
                     14: **                     ST_FIND -- find it only.
                     15: **
                     16: **     Returns:
                     17: **             pointer to a STAB entry for this name.
                     18: **             NULL if not found and not entered.
                     19: **
                     20: **     Side Effects:
                     21: **             can update the symbol table.
                     22: */
                     23: 
                     24: # define STABSIZE      400
                     25: 
                     26: static STAB    *SymTab[STABSIZE];
                     27: 
                     28: STAB *
                     29: stab(name, type, op)
                     30:        char *name;
                     31:        int type;
                     32:        int op;
                     33: {
                     34:        register STAB *s;
                     35:        register STAB **ps;
                     36:        extern bool sameword();
                     37:        register int hfunc;
                     38:        register char *p;
                     39:        extern char lower();
                     40: 
                     41: # ifdef DEBUG
                     42:        if (tTd(36, 5))
                     43:                printf("STAB: %s %d ", name, type);
                     44: # endif DEBUG
                     45: 
                     46:        /*
                     47:        **  Compute the hashing function
                     48:        **
                     49:        **      We could probably do better....
                     50:        */
                     51: 
                     52:        hfunc = type;
                     53:        for (p = name; *p != '\0'; p++)
                     54:                hfunc = (((hfunc << 7) | lower(*p)) & 077777) % STABSIZE;
                     55: 
                     56: # ifdef DEBUG
                     57:        if (tTd(36, 9))
                     58:                printf("(hfunc=%d) ", hfunc);
                     59: # endif DEBUG
                     60: 
                     61:        ps = &SymTab[hfunc];
                     62:        while ((s = *ps) != NULL && (!sameword(name, s->s_name) || s->s_type != type))
                     63:                ps = &s->s_next;
                     64: 
                     65:        /*
                     66:        **  Dispose of the entry.
                     67:        */
                     68: 
                     69:        if (s != NULL || op == ST_FIND)
                     70:        {
                     71: # ifdef DEBUG
                     72:                if (tTd(36, 5))
                     73:                {
                     74:                        if (s == NULL)
                     75:                                printf("not found\n");
                     76:                        else
                     77:                        {
                     78:                                long *lp = (long *) s->s_class;
                     79: 
                     80:                                printf("type %d val %lx %lx %lx %lx\n",
                     81:                                        s->s_type, lp[0], lp[1], lp[2], lp[3]);
                     82:                        }
                     83:                }
                     84: # endif DEBUG
                     85:                return (s);
                     86:        }
                     87: 
                     88:        /*
                     89:        **  Make a new entry and link it in.
                     90:        */
                     91: 
                     92: # ifdef DEBUG
                     93:        if (tTd(36, 5))
                     94:                printf("entered\n");
                     95: # endif DEBUG
                     96: 
                     97:        /* make new entry */
                     98:        s = (STAB *) xalloc(sizeof *s);
                     99:        clear((char *) s, sizeof *s);
                    100:        s->s_name = newstr(name);
                    101:        makelower(s->s_name);
                    102:        s->s_type = type;
                    103: 
                    104:        /* link it in */
                    105:        *ps = s;
                    106: 
                    107:        return (s);
                    108: }

unix.superglobalmegacorp.com

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