データ構造の名前を変更
[YACASL2.git] / src / casl2.c
index d17922c..14f372c 100644 (file)
@@ -4,10 +4,10 @@
 #define _GNU_SOURCE
 #include <getopt.h>
 
+#include "cmem.h"
+#include "cerr.h"
 #include "assemble.h"
 #include "exec.h"
-#include "cerr.h"
-#include "cmem.h"
 
 /**
  * casl2コマンドのオプション
@@ -33,7 +33,7 @@ static struct option longopts[] = {
 /**
  * casl2のエラー定義
  */
-static CERR cerr_casl2[] = {
+CERR cerr_casl2[] = {
     { 126, "no source file" },
 };
 
@@ -61,7 +61,9 @@ int main(int argc, char *argv[])
         "Usage: %s [-slLaAtTdh] [-oO[<OBJECTFILE>]] [-M <MEMORYSIZE>] [-C <CLOCKS>] FILE1[ FILE2  ...]\n";
 
     cerr_init();
-    addcerrlist(sizeof(cerr_casl2), cerr_casl2);
+    addcerrlist(ARRAYSIZE(cerr_casl2), cerr_casl2);
+    addcerrlist_assemble();
+    addcerrlist_exec();
     /* オプションの処理 */
     while((opt = getopt_long(argc, argv, "tTdslLao::O::AM:C:h", longopts, NULL)) != -1) {
         switch(opt) {
@@ -125,22 +127,23 @@ int main(int argc, char *argv[])
     for(pass = FIRST; pass <= SECOND; pass++) {
         if(pass == FIRST) {
             create_cmdtype_code();        /* 命令の名前とタイプがキーのハッシュ表を作成 */
-            asprop = malloc_chk(sizeof(ASPROP), "asprop"); /* アセンブル時のプロパティ用の領域確保 */
+            asptr = malloc_chk(sizeof(asptr), "asptr"); /* アセンブル時のプロパティ用の領域確保 */
         }
         for(i = optind; i < argc; i++) {
             /* データの格納開始位置 */
             if(pass == FIRST) {
-                beginptr[i] = asprop->ptr;
+                beginptr[i] = asptr->ptr;
             } else if(pass == SECOND) {
-                asprop->ptr = beginptr[i];
+                asptr->ptr = beginptr[i];
             }
-            asprop->prog = NULL;
+            asptr->prog = NULL;
             if(execmode.trace == true || execmode.dump == true || asmode.src == true ||
                asmode.label == true || asmode.asdetail == true)
             {
                 fprintf(stdout, "\nAssemble %s (%d)\n", argv[i], pass);
             }
             if((res = assemble(argv[i], pass)) == false) {
+                freecerr();            /* エラーの解放 */
                 exit(-1);
             }
         }
@@ -153,14 +156,15 @@ int main(int argc, char *argv[])
         }
         if(pass == SECOND) {
             freelabel();            /* ラベルハッシュ表を解放 */
-            free_chk(asprop->prog, "asprop.prog"); /* プログラム名を解放 */
-            free_chk(asprop, "asprop");       /* アセンブル時のプロパティを解放 */
+            free_chk(asptr->prog, "asptr.prog"); /* プログラム名を解放 */
+            free_chk(asptr, "asptr");       /* アセンブル時のプロパティを解放 */
             free_cmdtype_code();    /* 命令の名前とタイプがキーのハッシュ表を解放 */
         }
     }
     if(res == true) {
         if(objfile != NULL) {
             outassemble(objfile);
+            free_chk(objfile, "objfile");
         }
         if(asmode.onlyassemble == false) {
             create_code_type();    /* 命令のコードとタイプがキーのハッシュ表を作成 */
@@ -173,8 +177,6 @@ int main(int argc, char *argv[])
     if(cerr->num > 0) {
         status = -1;
     }
-    free_chk(objfile, "objfile");
-    /* エラーの解放 */
-    freecerr();
+    freecerr();            /* エラーの解放 */
     return status;
 }