X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=src%2Fassemble.c;h=a69837f6f4e2af44b27c9548416b00b0ca35da96;hp=343aa5205646e6c62d492f60b96fd3b6dfa15b69;hb=019b584feedf0402e473fba3e0e7752db78e616a;hpb=f8636262f5c60efbb9d1c608e2276d359bc348a0 diff --git a/src/assemble.c b/src/assemble.c index 343aa52..a69837f 100644 --- a/src/assemble.c +++ b/src/assemble.c @@ -3,6 +3,7 @@ #include #include #include +#include #include "assemble.h" #include "cerr.h" @@ -82,7 +83,7 @@ static CMD ascmd[] = { { "END", assemble_end }, { "DS", assemble_ds }, { "DC", assemble_dc }, - { NULL, NULL } + { "", NULL } }; /** @@ -93,7 +94,7 @@ static CMD macrocmd[] = { { "IN", assemble_in }, { "RPUSH", assemble_rpush }, { "RPOP", assemble_rpop }, - { NULL, NULL } + { "", NULL } }; /** @@ -183,9 +184,12 @@ WORD getliteral(const char *str, PASS pass) */ void writememory(WORD word, WORD adr, PASS pass) { + char *n; + /* メモリオーバーの場合、エラー発生 */ if(adr >= sys->memsize) { - setcerr(119, word2n(adr)); /* out of COMET II memory */ + setcerr(119, (n = word2n(adr))); /* out of COMET II memory */ + FREE(n) return; } (sys->memory)[adr] = word; @@ -257,7 +261,7 @@ void assemble_start(const CMDLINE *cmdl, PASS pass) setcerr(106, ""); /* operand count mismatch */ return; } - if(cmdl->label == NULL) { + if(*(cmdl->label) == '\0') { setcerr(107, ""); /* no label in START */ return; } @@ -468,7 +472,7 @@ bool casl2cmd(CMD *cmdtbl, const CMDLINE *cmdl, PASS pass) { int i; void (*cmdptr)(); - for(i = 0; cmdtbl[i].name != NULL; i++) { + for(i = 0; *(cmdtbl[i].name) != '\0'; i++) { if(strcmp(cmdl->cmd, cmdtbl[i].name) == 0) { cmdptr = cmdtbl[i].ptr; (*cmdptr)(cmdl, pass); @@ -575,7 +579,7 @@ bool assemble_comet2cmd(const CMDLINE *cmdl, PASS pass) bool assembletok(const CMDLINE *cmdl, PASS pass) { /* 命令がない場合 */ - if(cmdl->cmd == NULL) { + if(*(cmdl->cmd) == '\0') { return true; } /* アセンブラ命令またはマクロ命令の書込 */ @@ -604,14 +608,14 @@ bool assembleline(const char *line, PASS pass) stat = (cerr->num == 0) ? true : false; if(cmdl != NULL) { if(stat == true) { - if(pass == FIRST && cmdl->label != NULL) { + if(pass == FIRST && *(cmdl->label) != '\0') { stat = addlabel(asptr->prog, cmdl->label, asptr->ptr); } - if(stat == true) { - stat = assembletok(cmdl, pass); - } - FREE(cmdl->label); } + if(stat == true) { + stat = assembletok(cmdl, pass); + } + FREE(cmdl->label); if(cmdl->opd != NULL) { for(i = 0; i < cmdl->opd->opdc; i++) { FREE(cmdl->opd->opdv[i]); @@ -635,6 +639,7 @@ bool assemblefile(const char *file, PASS pass) FILE *fp; if((fp = fopen(file, "r")) == NULL) { + cerr->num = errno; perror(file); return false; }