diff --git a/core/wasm_shims/tooldata/tooldata_common_probe_main.cc b/core/wasm_shims/tooldata/tooldata_common_probe_main.cc index 2d5b9eb..354b8d2 100644 --- a/core/wasm_shims/tooldata/tooldata_common_probe_main.cc +++ b/core/wasm_shims/tooldata/tooldata_common_probe_main.cc @@ -123,6 +123,47 @@ int main() { nonrandom_spindle.offset.tran.z != 4.25) { return 20; } + CANON_TOOL_TABLE spindle_only = tooldata_entry_init(); + spindle_only.toolno = 99; + spindle_only.pocketno = 0; + spindle_only.offset.tran.z = 9.0; + if (tooldata_put(spindle_only, 0) != IDX_OK) { + return 21; + } + CANON_TOOL_TABLE saved_nonspindle = tooldata_entry_init(); + saved_nonspindle.toolno = 7; + saved_nonspindle.pocketno = 5; + saved_nonspindle.offset.tran.z = 4.25; + if (tooldata_put(saved_nonspindle, 1) == IDX_FAIL) { + return 26; + } + std::string nonrandom_save_template = make_temp_template("cnc_tooldata_common_nonrandom_save_XXXXXX"); + std::vector nonrandom_save_path(nonrandom_save_template.begin(), nonrandom_save_template.end()); + nonrandom_save_path.push_back('\0'); + const int nonrandom_save_fd = mkstemp(nonrandom_save_path.data()); + if (nonrandom_save_fd < 0) { + return 22; + } + close(nonrandom_save_fd); + // LinuxCNC source basis: src/emc/tooldata/tooldata_common.cc saves + // nonrandom tool tables starting at pocket 1, so spindle pocket 0 is not + // emitted unless DB_ACTIVE selects the one-entry spindle save path. + if (tooldata_save(nonrandom_save_path.data()) != 0) { + std::remove(nonrandom_save_path.data()); + return 23; + } + FILE *nonrandom_save_fp = std::fopen(nonrandom_save_path.data(), "r"); + if (!nonrandom_save_fp) { + std::remove(nonrandom_save_path.data()); + return 24; + } + char nonrandom_saved[CANON_TOOL_ENTRY_LEN * 2] = {}; + std::fread(nonrandom_saved, 1, sizeof(nonrandom_saved) - 1, nonrandom_save_fp); + std::fclose(nonrandom_save_fp); + std::remove(nonrandom_save_path.data()); + if (std::strstr(nonrandom_saved, "T99") || !std::strstr(nonrandom_saved, "T7")) { + return 25; + } tooldata_init(true); tooldata_set_db(DB_ACTIVE);