#include "textgame.hpp" #include "lpxclient.hpp" #include "lpxserver.hpp" #include "drivertests.hpp" #include "driver.hpp" #include struct EngineMaker { const char *name; DrivenEngineMaker func; }; static EngineMaker makers[] = { { "textgame", make_TextGame }, { "lpxclient", make_LpxClient }, { "lpxserver", make_LpxServer }, { "driverlistentest", make_DriverListenTest }, { "driverwebservertest", make_DriverWebServerTest }, { "driverdnsfailtest", make_DriverDNSFailTest }, { "driverprintclocktest", make_DriverPrintClockTest }, { nullptr, nullptr }, }; static void usage() { std::cerr << "Usage: main " << std::endl; for (int i = 0; makers[i].name != nullptr; i++) { std::cerr << " can be: " << makers[i].name << std::endl; } exit(1); } int main(int argc, char **argv) { UniqueDrivenEngine engine; if (argc < 2) usage(); std::string mode = argv[1]; for (int i = 0; makers[i].name != nullptr; i++) { if (mode == makers[i].name) { engine = makers[i].func(); break; } } if (engine == nullptr) usage(); // Remove one argument from the argument vector, // so that it looks like a normal argument vector. driver_drive(engine.get(), argc - 1, argv + 1); }