X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=src%2Fcomet2monitor.c;fp=src%2Fcomet2monitor.c;h=10872858ed3db4960f02ad6a5b194145735c20bb;hp=3f9ed7a9f2e989852d981821483afa3d3592c545;hb=a7982d41c9809fdddbc5bac27c9d08b8a9d05012;hpb=b57939e6166b26126802b129a3f367b972bb453f;ds=sidebyside diff --git a/src/comet2monitor.c b/src/comet2monitor.c index 3f9ed7a..1087285 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 * @@ -27,6 +39,12 @@ int main(int argc, char *argv[]) const char *version = PACKAGE_VERSION, *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 +59,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; }