shutdown関数の追加
authorj8takagi <j8takagi@nifty.com>
Sat, 13 Mar 2010 16:20:30 +0000 (01:20 +0900)
committerj8takagi <j8takagi@nifty.com>
Sat, 13 Mar 2010 16:20:30 +0000 (01:20 +0900)
include/casl2.h
src/casl2.c
src/comet2.c
src/struct.c

index 5d21418..038f3dd 100644 (file)
@@ -101,6 +101,9 @@ extern int cmdtabsize;
 /* COMET II仮想マシンのリセット */
 void reset();
 
+/* COMET II仮想マシンのシャットダウン */
+void shutdown();
+
 /* 命令と命令タイプがキーのハッシュ表を作成する */
 bool create_cmdtype_code();
 
index 989bbe7..d47abcd 100644 (file)
@@ -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);
 }
index bb07c5f..a7fb3f5 100644 (file)
@@ -86,6 +86,7 @@ int main(int argc, char *argv[])
     if(loadassemble(argv[optind]) == true) {
         exec();    /* プログラム実行 */
     }
+    shutdown();
     if(cerrno > 0) {
         goto comet2err;
     }
index f21c92e..7c3e785 100644 (file)
@@ -31,3 +31,9 @@ void reset()
         memory[i] = 0x0;
     }
 }
+
+/* COMET II仮想マシンのシャットダウン */
+void shutdown()
+{
+    free(memory);
+}