/**
* アセンブラ命令をメモリに書込
- * 実行に成功した場合はtrue、それ以外の場合はfalseを返す
+ * アセンブラ命令の場合はtrue、それ以外の場合はfalseを返す
*/
bool assemblecmd(const CMDLINE *cmdl, PASS pass)
{
if(strcmp(cmdl->cmd, ascmd[i].cmd) == 0) {
if(cmdl->opd->opdc < ascmd[i].opdc_min || cmdl->opd->opdc > ascmd[i].opdc_max) {
setcerr(106, NULL); /* operand count mismatch */
- return false;
+ return true;
}
cmdid = ascmd[i].cmdid;
break;
case START:
if(cmdl->label == NULL) {
setcerr(107, NULL); /* no label in START */
- return false;
+ return true;
}
/* プログラム名の設定 */
asptr->prog = strdup_chk(cmdl->label, "asptr.prog");
default:
return false;
}
- return (cerr->num == 0) ? true : false;
+ return true;
}
/**
* macrocmd
- * マクロ命令をメモリに書込
- * 書込に成功した場合はtrue、それ以外の場合はfalseを返す
+ * マクロ命令をメモリに書込
+ * マクロ命令の場合はtrue、それ以外の場合はfalseを返す
*/
bool macrocmd(const CMDLINE *cmdl, PASS pass)
{
cmdl->opd->opdc > macrocmd[i].opdc_max)
{
setcerr(106, NULL); /* operand count mismatch */
- return false;
+ return true;
}
cmdid = macrocmd[i].cmdid;
break;
{
case IN:
writeIN(cmdl->opd->opdv[0], cmdl->opd->opdv[1], pass);
- return true;
+ break;
case OUT:
writeOUT(cmdl->opd->opdv[0], cmdl->opd->opdv[1], pass);
- return true;
+ break;
case RPUSH:
writeRPUSH(pass);
- return true;
+ break;
case RPOP:
writeRPOP(pass);
- return true;
+ break;
default:
return false;
}
+ return true;
}
/**
*/
bool assembletok(const CMDLINE *cmdl, PASS pass)
{
- bool status = false;
-
/* 命令がない場合 */
if(cmdl->cmd == NULL){
- ;
- }
- /* アセンブラ命令の処理 */
- else if(cerr->num == 0 && assemblecmd(cmdl, pass) == true) {
- ;
- }
- /* マクロ命令の書込 */
- else if(cerr->num == 0 && macrocmd(cmdl, pass) == true) {
- ;
- }
- /* 機械語命令の書込 */
- else if(cerr->num == 0 && cometcmd(cmdl, pass) == true) {
- ;
- }
- else if(cerr->num == 0) {
- setcerr(113, cmdl->cmd); /* operand too many in COMET II command */
+ return true;
}
- /* エラーが発生していないか確認 */
- if(cerr->num == 0) {
- status = true;
+ /* アセンブラ命令またはマクロ命令の書込 */
+ if(assemblecmd(cmdl, pass) == false && macrocmd(cmdl, pass) == false) {
+ /* COMET II命令の書込 */
+ if(cometcmd(cmdl, pass) == false && cerr->num == 0) {
+ setcerr(113, cmdl->cmd); /* operand too many in COMET II command */
+ }
}
- return status;
+ return (cerr->num == 0) ? true : false;
}
/**
*/
int main(int argc, char *argv[])
{
- int memsize = DEFAULT_MEMSIZE, clocks = DEFAULT_CLOCKS, opt, i, status;
+ int memsize = DEFAULT_MEMSIZE, clocks = DEFAULT_CLOCKS, opt, i, stat;
char *af[argc];
char *objfile = NULL;
const char *usage =
}
casl2fin:
shutdown(); /* 仮想マシンCOMET IIのシャットダウン */
- status = (cerr->num == 0) ? 0 : -1;
+ stat = (cerr->num == 0) ? 0 : -1;
freecerr(); /* エラーの解放 */
- return status;
+ return stat;
}
bool loadassemble(const char *file)
{
FILE *fp;
- bool status = true;
+ bool stat = true;
assert(file != NULL);
if((fp = fopen(file, "r")) == NULL) {
if(execptr->end == sys->memsize) {
setcerr(210, file); /* load - memory overflow */
fprintf(stderr, "Load error - %d: %s\n", cerr->num, cerr->msg);
- status = false;
+ stat = false;
}
fclose(fp);
- return status;
+ return stat;
}
/**