diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ueda/unet-bind/insthash.c	Sun Sep 29 22:42:41 2019 +0000
@@ -0,0 +1,80 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <strings.h>
+#include "struct.h"
+
+#define	HASH_SIZE	1103
+static struct instance *hashtab[HASH_SIZE];
+
+static int
+hash_instname(str)
+	char *str;
+{
+	register u_long accum = 0;
+	register char *cp;
+	register int c, i;
+
+	for (cp = str, i = 1; c = *cp; cp++, i++)
+		accum += c * i;
+	return(accum % HASH_SIZE);
+}
+
+struct instance *
+enter_instance(newname)
+	char *newname;
+{
+	register struct instance *n, **np;
+	int namelen;
+
+	for (np = hashtab + hash_instname(newname); n = *np;
+	     np = &n->nextinhash)
+		if (!strcmp(n->name, newname)) {
+			fprintf(stderr, "error: duplicate instance name %s\n",
+				newname);
+			exit(1);
+		}
+	namelen = strlen(newname);
+	n = (struct instance *) malloc(sizeof(struct instance) + namelen + 1);
+	if (!n) {
+		perror("malloc");
+		exit(1);
+	}
+	bzero(n, sizeof(struct instance));
+	n->name = (char *)(n + 1);
+	strcpy(n->name, newname);
+	*np = n;
+	return n;
+}
+
+struct instance *
+find_instance(soughtname)
+	register char *soughtname;
+{
+	register struct instance *n;
+
+	for (n = hashtab[hash_instname(soughtname)]; n; n = n->nextinhash)
+		if (!strcmp(n->name, soughtname))
+			return(n);
+	return(0);
+}
+
+check_unclaimed_instances()
+{
+	int hb;
+	register struct instance *n;
+	unsigned unclaimed_count = 0;
+
+	for (hb = 0; hb < HASH_SIZE; hb++)
+		for (n = hashtab[hb]; n; n = n->nextinhash)
+			if (!n->claimed) {
+				fprintf(stderr,
+		"error: declared instance %s not claimed by input netlist\n",
+					n->name);
+				unclaimed_count++;
+			}
+	if (unclaimed_count) {
+		fprintf(stderr, "error: unclaimed instances found, aborting\n");
+		exit(1);
+	}
+}