#ifndef YACASL2_ASSEMBLE_H_INCLUDED
#define YACASL2_ASSEMBLE_H_INCLUDED
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
#include <stdbool.h>
-#include <ctype.h>
-#include <assert.h>
-#include <errno.h>
#include "cerr.h"
#include "struct.h"
#include "token.h"
+
/**
* @brief アセンブルモードを表すデータ型
*/
*
* @param num エラー番号
*/
-char *getcerrmsg(int num);
+const char *getcerrmsg(int num);
/**
* @brief エラーリストと現在のエラーを解放する
* @brief メモリを解放するマクロ
*/
#ifndef FREE
-#define FREE(ptr) {free(ptr); ptr = NULL;}
+#define FREE(ptr) do { free(ptr); (ptr) = NULL; } while(0)
#endif
/**
/**
* @brief モニター終了時の処理をする
*
+ * @return エラーがない場合は0、エラーがある場合は1
*/
int monquit();
*/
typedef struct {
char *name; /**<命令名 */
- const void (*ptr); /**<命令の関数ポインタ */
+ void (*ptr); /**<命令の関数ポインタ */
} CMD;
/**
char *name; /**<命令名 */
CMDTYPE type; /**<命令タイプ */
WORD code; /**<命令コード */
- const void (*ptr); /**<命令の関数ポインタ */
+ void (*ptr); /**<命令の関数ポインタ */
} COMET2CMD;
/**
bool trace; /**<レジストリの内容をステップごとに表示する場合はtrue */
bool logical; /**<レジストリの内容を論理値(0から65535)で表示する場合はtrue */
bool dump; /**<メモリの内容をステップごとに表示する場合はtrue */
- int dump_start; /**<メモリの内容をステップごとに表示する場合の開始アドレス */
- int dump_end; /**<メモリの内容をステップごとに表示する場合の終了アドレス */
+ WORD dump_start; /**<メモリの内容をステップごとに表示する場合の開始アドレス */
+ WORD dump_end; /**<メモリの内容をステップごとに表示する場合の終了アドレス */
bool monitor; /**<モニターモードの場合はtrue */
bool step; /**<ステップ実行の場合はtrue */
} EXECMODE;
*/
WORD getcmdcode(const char *cmd, CMDTYPE type);
+
/**
* 命令コードから命令の関数ポインタを返す
*/
-const void (*getcmdptr(WORD code));
+void (*getcmdptr(WORD code));
/**
* 命令コードから命令のタイプを返す
#include "assemble.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+#include <errno.h>
/**
* @brief ファイルストリームの現在行を番号付きで表示する
/* メモリオーバーの場合、エラー発生 */
if(adr >= sys->memsize) {
setcerr(119, (n = word2n(adr))); /* out of COMET II memory */
- FREE(n)
+ FREE(n);
return;
}
(sys->memory)[adr] = word;
}
}
-char *getcerrmsg(int num)
+const char *getcerrmsg(int num)
{
CERRLIST *p = NULL;
char *msg = "unknown error";
comet2_init(memsize, clocks); /* COMET II仮想マシンの初期化 */
execptr->start = 0;
execptr->end = loadassemble(argv[optind++], execptr->start);
+ /* 残りの引数(オプション以外の引数)があればInfoを表示 */
if(optind < argc) {
warn_ignore_arg(argc - optind, argv + optind);
}
- /* 残りの引数(オプション以外の引数)があるかチェック */
if(execptr->end > 0 && cerr->num == 0) {
exec(); /* プログラム実行 */
}
/**
* 命令コードから命令の関数ポインタを返す
*/
-const void (*getcmdptr(WORD code))
+void (*getcmdptr(WORD code))
{
CMDTAB *t = NULL;
- const void *ptr = NULL;
+ void *ptr = NULL;
for(t = cmdtab[HASH_CODE][hash_code(code)]; t != NULL; t = t->next) {
if(code == t->cmd->code) {