DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T h

⟦ba659f0e0⟧ TextFile

    Length: 1471 (0x5bf)
    Types: TextFile
    Names: »hash.c«

Derivation

└─⟦060c9c824⟧ Bits:30007080 DKUUG TeX 2/12/89
    └─⟦this⟧ »./babel/swedish/SLaTeX/l2sl/hash.c« 
└─⟦52210d11f⟧ Bits:30007239 EUUGD2: TeX 3 1992-12
    └─⟦23cd347d5⟧ »unix3.0/babel.tar.Z« 
        └─⟦2fb9f645a⟧ 
            └─⟦this⟧ »babel/swedish/SLaTeX/l2sl/hash.c« 

TextFile

#ifndef lint
static char *copyright = "Copyright (C) 1985, Sven Mattisson.";
#endif

#include <stdio.h>
#include "hash.h"
#include "comtab.h"

struct hashent {
    struct command  *comp;
    struct hashent  *next;
};

#define HASHSIZE	    103

struct hashent	hashtab[HASHSIZE] = { { NULL, NULL} };

extern char *malloc ();

int
hash (s)
    char *s;
{
    int hashval;

    for (hashval = 0; *s != '\0'; s++)
        hashval += 3 * (int)(*s);
    return (hashval % HASHSIZE);
}

struct command *
lookup (s)
    char *s;
{
    struct hashent *hp;

    for (hp = &hashtab[hash(s)]; hp -> comp != NULL; hp = hp -> next) {
        if (strcmp (s, hp -> comp -> name) == 0)
	    return (hp -> comp);
	if (hp -> next == NULL)
	    break;
    }
    return (NULL);
}

struct command *
install (com)
    struct command *com;
{
    struct hashent *p, *hp = &hashtab[hash (com -> name)];

    if (hp -> comp == NULL) {
        hp -> comp = com;
	return (hp -> comp);
    }
    for (p = hp; p != NULL; p = p -> next) {
        if (strcmp (p -> comp -> name, com -> name) == 0)
	    break;
	hp = p;
    }
    if (p == NULL) {
        hp -> next = (struct hashent *) malloc (sizeof (struct hashent));
	p = hp -> next;
	if (p == NULL)
	    return (NULL);
	p -> next = NULL;
    }
    p -> comp = com;
    return (p -> comp);
}

inithashtab ()
{
    int i;

    for (i = 0; i < comtabsize; i++)
        if (install (&comtab[i]) == NULL) {
	    perror ("inithashtab");
	    exit (1);
	}
}