X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=src%2Fcasl2.c;h=7569f92a06acde918f7d347171a98ffdfe9bef3b;hp=f66decdba0c72933cb9880092f5aa4e455f94bfa;hb=555c5e8b851becc08ba661a9cb19f617d5a00c12;hpb=df686f409d06eaac1e8909cbe453f256d56ae14f diff --git a/src/casl2.c b/src/casl2.c index f66decd..7569f92 100644 --- a/src/casl2.c +++ b/src/casl2.c @@ -40,7 +40,7 @@ void outassemble(const char *file) { perror(file); exit(-1); } - fwrite(memory, sizeof(WORD), progprop->end, fp); + fwrite(sys->memory, sizeof(WORD), prog->end, fp); fclose(fp); } @@ -54,7 +54,8 @@ const char *objfile_name(const char *str) /* casl2コマンドのメイン */ int main(int argc, char *argv[]) { - int opt, i, status = 0; + int memsize = DEFAULT_MEMSIZE, clocks = DEFAULT_CLOCKS; + int status = 0, opt, i; PASS pass; bool res = false; WORD beginptr[argc]; @@ -62,8 +63,7 @@ int main(int argc, char *argv[]) const char *usage = "Usage: %s [-slLaAtTdh] [-oO[]] [-M ] [-C ] FILE1[ FILE2 ...]\n"; - /* エラーの初期化 */ - cerr = malloc_chk(sizeof(CERR), "cerr"); + cerr_init(); addcerrlist_casl2(); /* オプションの処理 */ while((opt = getopt_long(argc, argv, "tTdslLao::O::AM:C:h", longopts, NULL)) != -1) { @@ -123,12 +123,12 @@ int main(int argc, char *argv[]) exit(-1); } /* COMET II仮想マシンのリセット */ - reset(); + reset(memsize, clocks); /* アセンブル。ラベル表作成のため、2回行う */ for(pass = FIRST; pass <= SECOND; pass++) { if(pass == FIRST) { create_cmdtype_code(); /* 命令と命令タイプがキーのハッシュ表を作成 */ - asprop = malloc_chk(sizeof(ASPROP), "asprop"); + asprop = malloc_chk(sizeof(ASPROP), "asprop"); /* アセンブル時のプロパティ用の領域確保 */ } for(i = optind; i < argc; i++) { /* データの格納開始位置 */ @@ -137,6 +137,7 @@ int main(int argc, char *argv[]) } else if(pass == SECOND) { asprop->ptr = beginptr[i]; } + asprop->prog = NULL; if(execmode.trace == true || execmode.dump == true || asmode.src == true || asmode.label == true || asmode.asdetail == true) { @@ -154,8 +155,10 @@ int main(int argc, char *argv[]) } } if(pass == SECOND) { - free_cmdtype_code(); /* 命令と命令タイプがキーのハッシュ表を解放 */ freelabel(); /* ラベルハッシュ表を解放 */ + free_chk(asprop->prog, "asprop.prog"); /* プログラム名を解放 */ + free_chk(asprop, "asprop"); /* アセンブル時のプロパティを解放 */ + free_cmdtype_code(); /* 命令と命令タイプがキーのハッシュ表を解放 */ } } if(res == true) { @@ -173,6 +176,7 @@ int main(int argc, char *argv[]) if(cerr->num > 0) { status = -1; } + free_chk(objfile, "objfile"); /* エラーの解放 */ freecerr(); return status;