+ HKEY *keys[2];
+ int i = 0, j;
+ unsigned h;
+
+ if(prog != NULL) {
+ keys[i] = malloc_chk(sizeof(HKEY), "labelhash.key");
+ keys[i]->type = CHARS;
+ keys[i]->val.s = strdup_chk(prog, "labelhash.key.val");
+ i++;
+ }
+ keys[i] = malloc_chk(sizeof(HKEY), "labelhash.key");
+ keys[i]->type = CHARS;
+ keys[i]->val.s = strdup_chk(label, "labelhash.key.val");
+ h = hash(i+1, keys, LABELTABSIZE);
+ for(j = 0; j < i + 1; j++) {
+ FREE(keys[j]->val.s);
+ FREE(keys[j]);
+ }
+ return h;
+}
+
+/**
+ * プログラム名とラベルに対応するアドレスをラベル表から検索する
+ */
+WORD getlabel(const char *prog, const char *label)
+{
+ assert(label != NULL);
+ LABELTAB *p;