From f9ad3a081e1777bb6d892af65d0e4090cb31bbfa Mon Sep 17 00:00:00 2001 From: j8takagi Date: Thu, 7 Apr 2011 14:49:21 +0900 Subject: [PATCH] =?utf8?q?=E3=82=A2=E3=82=BB=E3=83=B3=E3=83=96=E3=83=AB?= =?utf8?q?=E3=81=AE=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- include/assemble.h | 5 +++-- src/assemble.c | 8 +++++--- src/casl2.c | 9 ++++----- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/include/assemble.h b/include/assemble.h index 5d187c4..112f8d3 100644 --- a/include/assemble.h +++ b/include/assemble.h @@ -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); /** * 引数で指定したファイルにアセンブル結果を書込 diff --git a/src/assemble.c b/src/assemble.c index 929288e..fc7aed1 100644 --- a/src/assemble.c +++ b/src/assemble.c @@ -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; } /** diff --git a/src/casl2.c b/src/casl2.c index 541992a..37aee61 100644 --- a/src/casl2.c +++ b/src/casl2.c @@ -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; } -- 2.18.0