From db158a77c383d13a22b6a1fe03fb546bbb6434c0 Mon Sep 17 00:00:00 2001 From: Julian Blake Kongslie Date: Fri, 14 Oct 2022 12:05:42 -0700 Subject: Support loading multiple program tapes on top of eachother. --- main.cpp | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/main.cpp b/main.cpp index 5788c54..7d299ec 100644 --- a/main.cpp +++ b/main.cpp @@ -12,19 +12,7 @@ static const std::unordered_map programs = { { "count", _binary_count_bin_start } }; -int main(int argc, const char *argv[]) { - if (argc != 2) { - std::cerr << "Usage: " << argv[0] << " program\n"; - std::cerr << "Programs:\n"; - for (const auto &p : programs) - std::cerr << "\t" << p.first << "\n"; - return 1; - } - - auto program = programs.at(argv[1]); - - checker checker; - +int load_program(checker &checker, const std::uint8_t *program) { bool seen_non_leader = false; bool comment = false; unsigned int field = 0; @@ -58,6 +46,25 @@ int main(int argc, const char *argv[]) { } } } + return 0; +} + +int main(int argc, const char *argv[]) { + if (argc < 2) { + std::cerr << "Usage: " << argv[0] << " program [program ...]\n"; + std::cerr << "Programs:\n"; + for (const auto &p : programs) + std::cerr << "\t" << p.first << "\n"; + return 1; + } + + checker checker; + + for (--argc, ++argv; argc; --argc, ++argv) { + auto program = programs.at(argv[0]); + if (auto err = load_program(checker, program)) + return err; + } while (!checker.halted) { std::cout << fmt::format("{:04o}: ", checker.pc); -- cgit v1.2.3