X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=src%2Fcomet2monitor.c;h=1f08637a61632937bec8e8074ff300b28afa600c;hp=830bd664b7f5450cfc5c2bbddd8c5480926ad1aa;hb=HEAD;hpb=7de5c2cc6f4936135f6646c9ed48661443f3d791 diff --git a/src/comet2monitor.c b/src/comet2monitor.c index 830bd66..1f08637 100644 --- a/src/comet2monitor.c +++ b/src/comet2monitor.c @@ -1,5 +1,6 @@ #include "package.h" #include "exec.h" +#include "load.h" /** * comet2monitorコマンドのオプション @@ -13,7 +14,19 @@ static struct option longopts[] = { }; /** - * @brief comet2コマンドのメイン + * @brief casl2のエラー定義 + */ +CERR cerr_comet2monitor[] = { + { 401, "invalid option" }, +}; + +void addcerrlist_comet2monitor() +{ + addcerrlist(ARRAYSIZE(cerr_comet2monitor), cerr_comet2monitor); +} + +/** + * @brief comet2monitorコマンドのメイン * * @return 正常終了時は0、異常終了時は1 * @@ -22,11 +35,20 @@ static struct option longopts[] = { */ int main(int argc, char *argv[]) { - int memsize = DEFAULT_MEMSIZE, clocks = DEFAULT_CLOCKS; - int opt, stat = 0; - const char *version = PACKAGE_VERSION, *cmdversion = "comet2monitor: COMET II machine code monitor of YACASL2 version %s\n"; + int memsize = DEFAULT_MEMSIZE; + int clocks = DEFAULT_CLOCKS; + int opt = 0; + int stat = 0; + const char *version = PACKAGE_VERSION; + const char *cmdversion = "comet2monitor: COMET II machine code monitor of YACASL2 version %s\n"; const char *usage = "Usage: %s [-vh] [-M ] [-C ]\n"; + /* エラーの定義 */ + cerr_init(); + addcerrlist_load(); + addcerrlist_exec(); + addcerrlist_comet2monitor(); + /* オプションの処理 */ while((opt = getopt_long(argc, argv, "M:C:vh", longopts, NULL)) != -1) { switch(opt) { @@ -41,23 +63,25 @@ int main(int argc, char *argv[]) return 0; case 'h': fprintf(stdout, usage, argv[0]); - return 0; + goto comet2monitorfin; case '?': fprintf(stderr, usage, argv[0]); - exit(1); + setcerr(212, ""); /* invalid option */ + goto comet2monitorfin; } } - /* エラーの定義 */ - cerr_init(); - addcerrlist_load(); - addcerrlist_exec(); - + create_cmdtable(HASH_CMDTYPE); reset(memsize, clocks); /* COMET II仮想マシンのリセット */ execptr->start = 0; execmode.monitor = true; exec(); /* プログラム実行 */ shutdown(); - stat = (cerr->num == 0) ? 0 : 1; +comet2monitorfin: + free_cmdtable(HASH_CMDTYPE); + free_cmdtable(HASH_CODE); + if(cerr->num > 0) { + stat = 1; + } freecerr(); /* エラーの解放 */ return stat; }