X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=src%2Fassemble.c;h=f2f5978f8bfb6d50ba28edbe3145f7b144b1a7dc;hp=b9fbed7133218e630879000964515f85cfec536f;hb=d34c08f567db33d340b06aa48997cd8109c1d9a7;hpb=f1803bd560071fb724b2c7ff2f5f35fa5086d10a diff --git a/src/assemble.c b/src/assemble.c index b9fbed7..f2f5978 100644 --- a/src/assemble.c +++ b/src/assemble.c @@ -10,6 +10,9 @@ WORD lptr; /* 他のプログラムで参照する入口名 */ char *prog; +/* アセンブルモード: src, label, onlylabel, asdetail, onlyassemble */ +ASMODE asmode = {false, false, false, false, false}; + /* 汎用レジスタを表す文字列「GR[0-7]」から、レジスタ番号[0-7]をWORD値で返す */ /* 文字列が汎用レジスタを表さない場合は、0xFFFFを返す */ /* is_xがtrueの場合は指標レジスタ。GR0は、COMET IIの仕様により、エラー発生 */ @@ -143,7 +146,7 @@ bool assemblecmd(const CMDLINE *cmdl, PASS pass) CMDARRAY ascmd[] = { { START, 0, 1, "START" }, { END, 0, 0, "END" }, - { DC, 0, OPDSIZE, "DC" }, + { DC, 1, OPDSIZE, "DC" }, { DS, 1, 1, "DS" }, { 0, 0, 0, NULL } }; @@ -395,10 +398,6 @@ bool assembleline(const CMDLINE *cmdl, PASS pass) return status; } -void printline(FILE *stream, const char *filename, int lineno, char *line) { - fprintf(stream, "%s:%5d:%s", filename, lineno, line); -} - /* 指定された名前のファイルをアセンブル */ /* 2回実行される */ bool assemble(const char *file, PASS pass) @@ -426,7 +425,7 @@ bool assemble(const char *file, PASS pass) if((pass == FIRST && (&asmode)->src == true) || (pass == SECOND && (&asmode)->asdetail == true)) { - printline(stdout, file, lineno, line); + fprintf(stdout, "%s:%5d:%s", file, lineno, line); } if((cmdl = linetok(line)) != NULL) { if(pass == FIRST && cmdl->label != NULL) { @@ -443,8 +442,7 @@ bool assemble(const char *file, PASS pass) } } if(cerrno > 0) { - fprintf(stderr, "Assemble error - %d: %s\n", cerrno, cerrmsg); - printline(stderr, file, lineno, line); + fprintf(stderr, "Assemble error - %d: %s\n %s:%d: %s\n", cerrno, cerrmsg, file, lineno, line); status = false; } fclose(fp);