#include "TerminalEmbed.h" void TerminalEmbed::run() { for(auto m : runOrder) modules[m]->onLoad(); // Main loop while (!done && !runOrder.empty()) { for(auto m : runOrder) { modules[m]->run(); } handleEvents(); for(auto m : toClose) { unload(m); } toClose.clear(); for(auto m : toOpen) { if(std::holds_alternative(m)) { load(std::get(m))->onLoad(); } else { load(std::get(m))->onLoad(); } } toOpen.clear(); } } bool TerminalEmbed::onEvent(const Archimedes::Event& event) { unsigned int type = getEventType(event); if(type == getEventType(Archimedes::DoLoadModuleEvent())) { Archimedes::DoLoadModuleEvent& e = (Archimedes::DoLoadModuleEvent&) event; startModule(e.module); return true; } else if(type == getEventType(Archimedes::DoUnloadModuleEvent())) { Archimedes::DoUnloadModuleEvent& e = (Archimedes::DoUnloadModuleEvent&) event; stopModule(e.module); return true; } else if(type == getEventType(Archimedes::LoadModuleEvent())) { return true; } else if(type == getEventType(Archimedes::UnloadModuleEvent())) { return true; } else if(type == getEventType(Archimedes::AnonymousEvent())) { return true; } return false; }