-int cmdcodesize = ARRAYSIZE(cmdcodearray);
-CMDCODETAB *cmdtype_code[ARRAYSIZE(cmdcodearray)], *code_type[ARRAYSIZE(cmdcodearray)];
+/**
+ * 命令コード配列のサイズ
+ */
+static int comet2cmdsize = ARRAYSIZE(comet2cmd);
+
+/**
+ * 命令表のサイズ
+ */
+static int cmdtabsize;
+
+/**
+ * ハッシュ表
+ */
+static CMDTAB **cmdtype_code, **code_type;
+
+/**
+ * 命令の名前とタイプからハッシュ値を生成する
+ */
+unsigned hash_cmdtype(const char *cmd, CMDTYPE type)
+{
+ HKEY *keys[2];
+ unsigned hashval;
+
+ /* 命令名を設定 */
+ keys[0] = malloc_chk(sizeof(HKEY), "hash_cmdtype.keys[0]");
+ keys[0]->type = CHARS;
+ keys[0]->val.s = strdup_chk(cmd, "keys[0].val.s");
+ /* 命令タイプを設定 */
+ keys[1] = malloc_chk(sizeof(HKEY), "hash_cmdtype.keys[1]");
+ keys[1]->type = INT;
+ keys[1]->val.i = (int)(type & 070);
+ /* ハッシュ値の計算 */
+ hashval = hash(2, keys, cmdtabsize);
+ free_chk(keys[0]->val.s, "keys[0].val.s");
+ free_chk(keys[0], "keys[0]");
+ free_chk(keys[1], "keys[1]");
+ /* ハッシュ値を返す */
+ return hashval;
+}