X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=src%2Fassemble.c;h=7dcd888cb7a7e31932ce5a121bd9c9efef3244dc;hp=c9f1345c00a65b0c815fed3ee7c3e2414917b66d;hb=650f92bf8dfdd0095db993f71f9e3867e7119acc;hpb=4ee27a568fb9222907a566e59aaefe248f08a8e4 diff --git a/src/assemble.c b/src/assemble.c index c9f1345..7dcd888 100644 --- a/src/assemble.c +++ b/src/assemble.c @@ -47,7 +47,7 @@ WORD getgr(const char *str, bool is_x) WORD r; /* 「GR[0-7]」以外の文字列では、0xFFFFを返して終了 */ if(!(strlen(str) == 3 && strncmp(str, "GR", 2) == 0 && - (*(str+2) >= '0' && *(str+2) <= '0' + GRSIZE))) + (*(str+2) >= '0' && *(str+2) <= '0' + (GRSIZE - 1)))) { return 0xFFFF; } @@ -167,9 +167,9 @@ void writeDC(const char *str, PASS pass) bool assemblecmd(const CMDLINE *cmdl, PASS pass) { int i = 0; - CASLCMD cmd = 0; + ASCMDID cmdid = 0; bool status = false; - CMDARRAY ascmd[] = { + ASCMD ascmd[] = { { START, 0, 1, "START" }, { END, 0, 0, "END" }, { DC, 1, OPDSIZE, "DC" }, @@ -183,12 +183,12 @@ bool assemblecmd(const CMDLINE *cmdl, PASS pass) setcerr(106, NULL); /* operand count mismatch */ return false; } - cmd = ascmd[i].cmdid; + cmdid = ascmd[i].cmdid; break; } } while(ascmd[++i].cmdid != 0); /* アセンブラ命令 */ - switch(cmd) + switch(cmdid) { case START: if(cmdl->label == NULL) { @@ -196,7 +196,7 @@ bool assemblecmd(const CMDLINE *cmdl, PASS pass) return false; } /* プログラム名の設定 */ - asprop->prog = strdup(cmdl->label); + asprop->prog = strdup_chk(cmdl->label, "asprop.prog"); /* オペランドがある場合、実行開始番地を設定 */ if(pass == SECOND && cmdl->opd->opdc == 1) { if((progprop->start = getlabel(asprop->prog, cmdl->opd->opdv[0])) == 0xFFFF) { @@ -249,9 +249,9 @@ bool assemblecmd(const CMDLINE *cmdl, PASS pass) bool macrocmd(const CMDLINE *cmdl, PASS pass) { int i = 0; - CASLCMD cmd; + MACROCMDID cmdid; bool status = false; - CMDARRAY macrocmd[] = { + MACROCMD macrocmd[] = { { IN, 2, 2, "IN" }, { OUT, 2, 2, "OUT" }, { RPUSH, 0, 0, "RPUSH" }, @@ -261,15 +261,17 @@ bool macrocmd(const CMDLINE *cmdl, PASS pass) do { if(strcmp(cmdl->cmd, macrocmd[i].cmd) == 0) { - if(cmdl->opd->opdc < macrocmd[i].opdc_min || cmdl->opd->opdc > macrocmd[i].opdc_max) { + if(cmdl->opd->opdc < macrocmd[i].opdc_min || + cmdl->opd->opdc > macrocmd[i].opdc_max) + { setcerr(106, NULL); /* operand count mismatch */ return false; } - cmd = macrocmd[i].cmdid; + cmdid = macrocmd[i].cmdid; break; } } while(macrocmd[++i].cmdid != 0); - switch(cmd) + switch(cmdid) { case IN: status = writeIN(cmdl->opd->opdv[0], cmdl->opd->opdv[1], pass);