/**
* コードがキーの命令ハッシュ表を作成する
*/
-bool create_code_type();
+bool create_code_cmdtype();
/**
* 命令コードから命令の関数ポインタを返す
/**
* コードがキーの命令ハッシュ表を解放する
*/
-void free_code_type();
+void free_code_cmdtype();
#endif /* YACASL2_CASL2_INCLUDEDの終端 */
void (*cmdptr)();
char *s;
- create_code_type(); /* 命令のコードとタイプがキーのハッシュ表を作成 */
+ create_code_cmdtype(); /* 命令のコードとタイプがキーのハッシュ表を作成 */
if(execmode.trace == true) {
fprintf(stdout, "\nExecuting machine codes\n");
}
} while(clock_end - clock_begin < CLOCKS_PER_SEC / sys->clocks);
}
execfin:
- free_code_type(); /* 命令のコードとタイプがキーのハッシュ表を解放 */
+ free_code_cmdtype(); /* 命令のコードとタイプがキーのハッシュ表を解放 */
if(cerr->num > 0) {
fprintf(stderr, "Execute error - %d: %s\n", cerr->num, cerr->msg);
}
/**
* ハッシュ表
*/
-static CMDTAB *cmdtype_code[CMDTABSIZE], *code_type[CMDTABSIZE];
+static CMDTAB *cmdtype_code[CMDTABSIZE], *code_cmdtype[CMDTABSIZE];
/**
* 命令の名前とタイプからハッシュ値を生成する
/**
* コードがキーの命令ハッシュ表を作成する
*/
-bool create_code_type()
+bool create_code_cmdtype()
{
CMDTAB *p;
unsigned hashval;
for(i = 0; i < comet2cmdsize; i++) {
hashval = hash_code((&comet2cmd[i])->code); /* ハッシュ値の生成 */
- p = malloc_chk(sizeof(CMDTAB), "code_type");
+ p = malloc_chk(sizeof(CMDTAB), "code_cmdtype");
p->cmd = &comet2cmd[i];
- p->next = code_type[hashval]; /* ハッシュ表に値を追加 */
- code_type[hashval] = p;
+ p->next = code_cmdtype[hashval]; /* ハッシュ表に値を追加 */
+ code_cmdtype[hashval] = p;
}
return true;
}
CMDTAB *t;
const void *ptr = NULL;
- for(t = code_type[hash_code(code)]; t != NULL; t = t->next) {
+ for(t = code_cmdtype[hash_code(code)]; t != NULL; t = t->next) {
if(code == t->cmd->code) {
ptr = t->cmd->ptr;
break;
return ptr;
}
+/**
+ * 命令コードから命令の名前を返す
+ */
+char (*getcmdname(WORD code))
+{
+ CMDTAB *t;
+ char *cmd = NULL;
+
+ for(t = code_cmdtype[hash_code(code)]; t != NULL; t = t->next) {
+ if(code == t->cmd->code) {
+ cmd = t->cmd->name;
+ break;
+ }
+ }
+ return cmd;
+}
+
/**
* コードがキーの命令ハッシュ表を解放する
*/
-void free_code_type()
+void free_code_cmdtype()
{
int i;
CMDTAB *p, *q;
for(i = 0; i < CMDTABSIZE; i++) {
- for(p = code_type[i]; p != NULL; p = q) {
+ for(p = code_cmdtype[i]; p != NULL; p = q) {
q = p->next;
FREE(p);
}