From: j8takagi Date: Sat, 13 Mar 2010 16:20:30 +0000 (+0900) Subject: shutdown関数の追加 X-Git-Tag: v0.1p15~45 X-Git-Url: https://j8takagi.net/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=755c5127855b776d1a4260f05afc95640045f29d;p=YACASL2.git shutdown関数の追加 --- diff --git a/include/casl2.h b/include/casl2.h index 5d21418..038f3dd 100644 --- a/include/casl2.h +++ b/include/casl2.h @@ -101,6 +101,9 @@ extern int cmdtabsize; /* COMET II仮想マシンのリセット */ void reset(); +/* COMET II仮想マシンのシャットダウン */ +void shutdown(); + /* 命令と命令タイプがキーのハッシュ表を作成する */ bool create_cmdtype_code(); diff --git a/src/casl2.c b/src/casl2.c index 989bbe7..d47abcd 100644 --- a/src/casl2.c +++ b/src/casl2.c @@ -121,6 +121,7 @@ int main(int argc, char *argv[]) /* ソースファイルが指定されていない場合は終了 */ if(argv[optind] == NULL) { setcerr(126, NULL); /* source file is not specified */ + fprintf(stderr, "CASL2 error - %d: %s\n", cerrno, cerrmsg); goto casl2err; } /* COMET II仮想マシンのリセット */ @@ -143,7 +144,7 @@ int main(int argc, char *argv[]) fprintf(stdout, "\nAssemble %s (%d)\n", argv[i], pass); } if((status = assemble(argv[i], pass)) == false) { - exit(-1); + goto casl2err; } } if(pass == FIRST && asmode.label == true) { @@ -164,12 +165,12 @@ int main(int argc, char *argv[]) exec(); /* プログラム実行 */ } } + shutdown(); if(cerrno > 0) { - freecerr(); - exit(-1); + goto casl2err; } return 0; casl2err: - fprintf(stderr, "CASL2 error - %d: %s\n", cerrno, cerrmsg); + freecerr(); exit(-1); } diff --git a/src/comet2.c b/src/comet2.c index bb07c5f..a7fb3f5 100644 --- a/src/comet2.c +++ b/src/comet2.c @@ -86,6 +86,7 @@ int main(int argc, char *argv[]) if(loadassemble(argv[optind]) == true) { exec(); /* プログラム実行 */ } + shutdown(); if(cerrno > 0) { goto comet2err; } diff --git a/src/struct.c b/src/struct.c index f21c92e..7c3e785 100644 --- a/src/struct.c +++ b/src/struct.c @@ -31,3 +31,9 @@ void reset() memory[i] = 0x0; } } + +/* COMET II仮想マシンのシャットダウン */ +void shutdown() +{ + free(memory); +}