From 131707f9d85de0873878b4eaa6bee2ec47ca9582 Mon Sep 17 00:00:00 2001 From: kichikuou Date: Fri, 22 May 2020 09:32:04 +0900 Subject: [PATCH] Merge upstream changes: Improve error messages for unknown commands Unlike the upstream, we use fatal() because it generates a message box even if DEBUG_CONSOLE is disabled. --- src/sys/nact.cpp | 7 ++++++- src/sys/nact.h | 2 +- src/sys/nact_sys1.cpp | 21 ++++++++++++++++++++- src/sys/nact_sys2.cpp | 8 +++++++- src/sys/nact_sys3.cpp | 1 + 5 files changed, 35 insertions(+), 4 deletions(-) diff --git a/src/sys/nact.cpp b/src/sys/nact.cpp index 2675169..bfc43c1 100644 --- a/src/sys/nact.cpp +++ b/src/sys/nact.cpp @@ -165,6 +165,7 @@ void NACT::execute(T* impl) } // 1コマンド実行 + prev_addr = scenario_addr; uint8 cmd = getd(); if(set_palette && cmd != 'P') { @@ -345,7 +346,11 @@ void NACT::execute(T* impl) } output_console(string); } else { - fatal("Unknown command %2x at %d", cmd, scenario_addr); + if(cmd >= 0x20 && cmd < 0x7f) { + fatal("Unknown Command: '%c' at page = %d, addr = %d", cmd, scenario_page, prev_addr); + } else { + fatal("Unknown Command: %02x at page = %d, addr = %d", cmd, scenario_page, prev_addr); + } } break; } diff --git a/src/sys/nact.h b/src/sys/nact.h index aa92a35..4231e94 100644 --- a/src/sys/nact.h +++ b/src/sys/nact.h @@ -109,7 +109,7 @@ protected: int scenario_size; // アドレス、ページ管理 - int scenario_addr; + int scenario_addr, prev_addr; int scenario_page; int label_depth; int label_stack[MAX_STACK]; diff --git a/src/sys/nact_sys1.cpp b/src/sys/nact_sys1.cpp index 34766cd..7f4301a 100644 --- a/src/sys/nact_sys1.cpp +++ b/src/sys/nact_sys1.cpp @@ -127,7 +127,9 @@ void NACT_Sys1::cmd_branch() bool set_menu = false; if(!condition) { + // 次の'}'命令までスキップする(ネストも考慮する) for(;;) { + prev_addr = scenario_addr; uint8 cmd = getd(); if(cmd == '!') { @@ -209,7 +211,11 @@ void NACT_Sys1::cmd_branch() // message (2 bytes) getd(); } else { - fatal("cmd_branch: invalid command %2x", cmd); + if(cmd >= 0x20 && cmd < 0x7f) { + fatal("Unknown Command: '%c' at page = %d, addr = %d", cmd, scenario_page, prev_addr); + } else { + fatal("Unknown Command: %02x at page = %d, addr = %d", cmd, scenario_page, prev_addr); + } break; } } @@ -833,16 +839,19 @@ void NACT_Sys1::cmd_a() void NACT_Sys1::cmd_b() { // 未使用 + fatal("Unknown Command: 'B' at page = %d, addr = %d", scenario_page, prev_addr); } void NACT_Sys1::cmd_d() { // 未使用 + fatal("Unknown Command: 'D' at page = %d, addr = %d", scenario_page, prev_addr); } void NACT_Sys1::cmd_e() { // 未使用 + fatal("Unknown Command: 'E' at page = %d, addr = %d", scenario_page, prev_addr); } void NACT_Sys1::cmd_f() @@ -877,21 +886,25 @@ void NACT_Sys1::cmd_g() void NACT_Sys1::cmd_h() { // 未使用 + fatal("Unknown Command: 'H' at page = %d, addr = %d", scenario_page, prev_addr); } void NACT_Sys1::cmd_i() { // 未使用 + fatal("Unknown Command: 'I' at page = %d, addr = %d", scenario_page, prev_addr); } void NACT_Sys1::cmd_j() { // 未使用 + fatal("Unknown Command: 'J' at page = %d, addr = %d", scenario_page, prev_addr); } void NACT_Sys1::cmd_k() { // 未使用 + fatal("Unknown Command: 'K' at page = %d, addr = %d", scenario_page, prev_addr); } void NACT_Sys1::cmd_l() @@ -999,16 +1012,19 @@ void NACT_Sys1::cmd_l() void NACT_Sys1::cmd_m() { // 未使用 + fatal("Unknown Command: 'M' at page = %d, addr = %d", scenario_page, prev_addr); } void NACT_Sys1::cmd_n() { // 未使用 + fatal("Unknown Command: 'N' at page = %d, addr = %d", scenario_page, prev_addr); } void NACT_Sys1::cmd_o() { // 未使用 + fatal("Unknown Command: 'O' at page = %d, addr = %d", scenario_page, prev_addr); } void NACT_Sys1::cmd_p() @@ -1145,6 +1161,7 @@ void NACT_Sys1::cmd_s() void NACT_Sys1::cmd_t() { // 未使用 + fatal("Unknown Command: 'T' at page = %d, addr = %d", scenario_page, prev_addr); } void NACT_Sys1::cmd_u() @@ -1168,11 +1185,13 @@ void NACT_Sys1::cmd_u() void NACT_Sys1::cmd_v() { // 未使用 + fatal("Unknown Command: 'V' at page = %d, addr = %d", scenario_page, prev_addr); } void NACT_Sys1::cmd_w() { // 未使用 + fatal("Unknown Command: 'W' at page = %d, addr = %d", scenario_page, prev_addr); } void NACT_Sys1::cmd_x() diff --git a/src/sys/nact_sys2.cpp b/src/sys/nact_sys2.cpp index 50ce7c8..5ab52b5 100644 --- a/src/sys/nact_sys2.cpp +++ b/src/sys/nact_sys2.cpp @@ -80,7 +80,9 @@ void NACT_Sys2::cmd_branch() bool set_menu = false; if(!condition) { + // 次の'}'命令までスキップする(ネストも考慮する) for(;;) { + prev_addr = scenario_addr; uint8 cmd = getd(); if(cmd == '!') { @@ -226,7 +228,11 @@ void NACT_Sys2::cmd_branch() // message (2 bytes) getd(); } else { - fatal("cmd_branch: invalid command %2x", cmd); + if(cmd >= 0x20 && cmd < 0x7f) { + fatal("Unknown Command: '%c' at page = %d, addr = %d", cmd, scenario_page, prev_addr); + } else { + fatal("Unknown Command: %02x at page = %d, addr = %d", cmd, scenario_page, prev_addr); + } break; } } diff --git a/src/sys/nact_sys3.cpp b/src/sys/nact_sys3.cpp index 96ff1ea..a69f6d7 100644 --- a/src/sys/nact_sys3.cpp +++ b/src/sys/nact_sys3.cpp @@ -489,6 +489,7 @@ void NACT_Sys3::cmd_b() void NACT_Sys3::cmd_d() { // 未使用 + fatal("Unknown Command: 'D' at page = %d, addr = %d", scenario_page, prev_addr); } void NACT_Sys3::cmd_e()