アセンブルの整理
authorj8takagi <j8takagi@nifty.com>
Thu, 7 Apr 2011 05:49:21 +0000 (14:49 +0900)
committerj8takagi <j8takagi@nifty.com>
Thu, 7 Apr 2011 05:49:21 +0000 (14:49 +0900)
include/assemble.h
src/assemble.c
src/casl2.c

index 5d187c4..112f8d3 100644 (file)
@@ -178,9 +178,10 @@ void addcerrlist_assemble();
 
 /**
  * 指定された名前のファイルをアセンブル
- * 2回実行される
+ * 1回目ではラベルを登録し、2回目ではラベルからアドレスを読み込む
+ * アセンブル完了時はtrue、エラー発生時はfalseを返す
  */
-void assemble(const char *file, PASS pass);
+bool assemblefile(const char *file, PASS pass);
 
 /**
  * 引数で指定したファイルにアセンブル結果を書込
index 929288e..fc7aed1 100644 (file)
@@ -634,9 +634,10 @@ void addcerrlist_assemble()
 
 /**
  * 指定された名前のファイルをアセンブル
- * 2回実行される
+ * 1回目ではラベルを登録し、2回目ではラベルからアドレスを読み込む
+ * アセンブル完了時はtrue、エラー発生時はfalseを返す
  */
-void assemble(const char *file, PASS pass)
+bool assemblefile(const char *file, PASS pass)
 {
     int lineno = 0;
     char *line;
@@ -644,7 +645,7 @@ void assemble(const char *file, PASS pass)
 
     if((fp = fopen(file, "r")) == NULL) {
         perror(file);
-        exit(-1);
+        return false;
     }
     line = malloc_chk(LINESIZE + 1, "assemble.line");
     while(fgets(line, LINESIZE, fp)) {
@@ -664,6 +665,7 @@ void assemble(const char *file, PASS pass)
     }
     FREE(line);
     fclose(fp);
+    return (cerr->num == 0) ? true : false;
 }
 
 /**
index 541992a..37aee61 100644 (file)
@@ -55,9 +55,9 @@ const char *objfile_name(const char *str)
 }
 
 /**
- * アセンブルを実行
+ * 指定された1つまたは複数のファイルを2回アセンブル
  */
-void doassemble(int filec, char *filev[])
+void assemble(int filec, char *filev[])
 {
     int i;
     PASS pass;
@@ -79,8 +79,7 @@ void doassemble(int filec, char *filev[])
             {
                 fprintf(stdout, "\nAssemble %s (%d)\n", filev[i], pass);
             }
-            assemble(filev[i], pass);
-            if(cerr->num > 0) {
+            if(assemblefile(filev[i], pass) == false) {
                 goto assemblefin;
             }
         }
@@ -174,7 +173,7 @@ int main(int argc, char *argv[])
     for(i = 0; i < argc - optind; i++) {           /* 引数からファイル名配列を取得 */
         af[i] = argv[optind + i];
     }
-    doassemble(i, af);                             /* アセンブル */
+    assemble(i, af);                               /* アセンブル */
     if(asmode.onlylabel == true || cerr->num > 0) {
         goto casl2fin;
     }