X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fcasl2.c;h=7569f92a06acde918f7d347171a98ffdfe9bef3b;hb=bf31ea99380e3ee2198f61f6510ebe6e4a3961f5;hp=7ec14fa3d7499b11602e4d1cbffb89a31b69684c;hpb=3aab1400bc11c15975b3094ac44e02c73a8c3d04;p=YACASL2.git diff --git a/src/casl2.c b/src/casl2.c index 7ec14fa..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,16 +54,16 @@ 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]; char *objfile = NULL; const char *usage = - "Usage: %s [-slLaAtTdh] [-oO] [-M ] [-C ] FILE ...\n"; + "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;