X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=src%2Fcasl2.c;h=c40a0a77bd5b89dc087ad5b1322f41331e176fcd;hp=541992aad9be43dca309fffa739041a85974670a;hb=7b6d89e7273b49e335af425cbb1ecb2258bf15df;hpb=93f3bbbc043d2883610bd979556e0bae42e5c8b2 diff --git a/src/casl2.c b/src/casl2.c index 541992a..c40a0a7 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; @@ -65,6 +65,7 @@ void doassemble(int filec, char *filev[]) create_cmdtype_code(); /* 命令の名前とタイプがキーのハッシュ表を作成 */ asptr = malloc_chk(sizeof(ASPTR), "asptr"); /* アセンブル時のプロパティ用の領域確保 */ + asptr->ptr = 0; /* アセンブル。ラベル表作成のため、2回行う */ for(pass = FIRST; pass <= SECOND; pass++) { for(i = 0; i < filec; i++) { @@ -74,14 +75,14 @@ void doassemble(int filec, char *filev[]) } else if(pass == SECOND) { asptr->ptr = bp[i]; } - if(execmode.trace == true || execmode.dump == true || asmode.src == true || - asmode.label == true || asmode.asdetail == true) + if(execmode.trace == true || execmode.dump == true || + asmode.src == true || asmode.label == true || asmode.asdetail == true) { fprintf(stdout, "\nAssemble %s (%d)\n", filev[i], pass); } - assemble(filev[i], pass); - if(cerr->num > 0) { - goto assemblefin; + /* ファイルをアセンブル */ + if(assemblefile(filev[i], pass) == false) { + goto asfin; } } if(pass == FIRST && asmode.label == true) { @@ -92,7 +93,7 @@ void doassemble(int filec, char *filev[]) } } } -assemblefin: +asfin: freelabel(); /* ラベルハッシュ表を解放 */ free_cmdtype_code(); /* 命令の名前とタイプがキーのハッシュ表を解放 */ FREE(asptr); /* アセンブル時のプロパティを解放 */ @@ -103,7 +104,7 @@ assemblefin: */ int main(int argc, char *argv[]) { - int memsize = DEFAULT_MEMSIZE, clocks = DEFAULT_CLOCKS, opt, i, status; + int memsize = DEFAULT_MEMSIZE, clocks = DEFAULT_CLOCKS, opt, i, stat; char *af[argc]; char *objfile = NULL; const char *usage = @@ -174,7 +175,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; } @@ -189,7 +190,7 @@ int main(int argc, char *argv[]) } casl2fin: shutdown(); /* 仮想マシンCOMET IIのシャットダウン */ - status = (cerr->num == 0) ? 0 : -1; + stat = (cerr->num == 0) ? 0 : -1; freecerr(); /* エラーの解放 */ - return status; + return stat; }