comparison ueda/unet-bind/insthash.c @ 101:ffab0a4424ad

ueda: unet-bind program moved into sensibly named unet-bind subdir
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 29 Sep 2019 22:42:41 +0000
parents ueda/sverp-bind/insthash.c@f7b09a54c2ce
children
comparison
equal deleted inserted replaced
100:071b24bca546 101:ffab0a4424ad
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <strings.h>
5 #include "struct.h"
6
7 #define HASH_SIZE 1103
8 static struct instance *hashtab[HASH_SIZE];
9
10 static int
11 hash_instname(str)
12 char *str;
13 {
14 register u_long accum = 0;
15 register char *cp;
16 register int c, i;
17
18 for (cp = str, i = 1; c = *cp; cp++, i++)
19 accum += c * i;
20 return(accum % HASH_SIZE);
21 }
22
23 struct instance *
24 enter_instance(newname)
25 char *newname;
26 {
27 register struct instance *n, **np;
28 int namelen;
29
30 for (np = hashtab + hash_instname(newname); n = *np;
31 np = &n->nextinhash)
32 if (!strcmp(n->name, newname)) {
33 fprintf(stderr, "error: duplicate instance name %s\n",
34 newname);
35 exit(1);
36 }
37 namelen = strlen(newname);
38 n = (struct instance *) malloc(sizeof(struct instance) + namelen + 1);
39 if (!n) {
40 perror("malloc");
41 exit(1);
42 }
43 bzero(n, sizeof(struct instance));
44 n->name = (char *)(n + 1);
45 strcpy(n->name, newname);
46 *np = n;
47 return n;
48 }
49
50 struct instance *
51 find_instance(soughtname)
52 register char *soughtname;
53 {
54 register struct instance *n;
55
56 for (n = hashtab[hash_instname(soughtname)]; n; n = n->nextinhash)
57 if (!strcmp(n->name, soughtname))
58 return(n);
59 return(0);
60 }
61
62 check_unclaimed_instances()
63 {
64 int hb;
65 register struct instance *n;
66 unsigned unclaimed_count = 0;
67
68 for (hb = 0; hb < HASH_SIZE; hb++)
69 for (n = hashtab[hb]; n; n = n->nextinhash)
70 if (!n->claimed) {
71 fprintf(stderr,
72 "error: declared instance %s not claimed by input netlist\n",
73 n->name);
74 unclaimed_count++;
75 }
76 if (unclaimed_count) {
77 fprintf(stderr, "error: unclaimed instances found, aborting\n");
78 exit(1);
79 }
80 }