2 * Copyright (C) 1994-1995, Index Data I/S
4 * Sebastian Hammer, Adam Dickmeiss
7 * Revision 1.2 1995-09-28 09:19:44 adam
8 * xfree/xmalloc used everywhere.
9 * Extract/retrieve method seems to work for text records.
11 * Revision 1.1 1995/09/06 16:11:18 adam
12 * Option: only one word key per file.
25 struct strentry *next;
31 struct strentry *ar[STR_HASH];
34 struct strtab *strtab_mk (void)
37 struct strtab *p = xmalloc (sizeof (*p));
38 for (i=0; i<STR_HASH; i++)
43 int strtab_src (struct strtab *t, const char *name, void ***infop)
49 for (i=0; name[i]; i++)
50 hash += hash*65519 + name[i];
51 hash = hash % STR_HASH;
52 for (e = t->ar[hash]; e; e = e->next)
53 if (!strcmp(e->name, name))
58 e = xmalloc (sizeof(*e));
59 e->name = xmalloc (strlen(name)+1);
60 strcpy (e->name, name);
61 e->next = t->ar[hash];
67 void strtab_del (struct strtab *t,
68 void (*func)(const char *name, void *info, void *data),
72 struct strentry *e, *e1;
74 for (i = 0; i<STR_HASH; i++)
75 for (e = t->ar[i]; e; e = e1)
78 (*func)(e->name, e->info, data);