X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=src%2Fcomet2monitor.c;h=8d839487f4a2655cef74b087303349b5c9b0d157;hp=3f9ed7a9f2e989852d981821483afa3d3592c545;hb=86e559d164166966a797a1e5855871d48e087ddd;hpb=c6c69d4a9a0f850296bf54a5770a672bafab56db diff --git a/src/comet2monitor.c b/src/comet2monitor.c index 3f9ed7a..8d83948 100644 --- a/src/comet2monitor.c +++ b/src/comet2monitor.c @@ -13,7 +13,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 +34,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,26 +62,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(); +comet2monitorfin: free_cmdtable(HASH_CMDTYPE); - stat = (cerr->num == 0) ? 0 : 1; + free_cmdtable(HASH_CODE); + if(cerr->num > 0) { + stat = 1; + } freecerr(); /* エラーの解放 */ return stat; }