X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fmain.cpp;h=f9bc154739fa57a0045f8e6bbd991782367cc9d7;hb=c3c5045f06327db2a3c97eae77a072bc06677286;hp=06771fe8c4b76d1df04ee9292dd92088eb2428d0;hpb=b314df303ffedbd6d2e81872908d12fc9712801a;p=blank.git diff --git a/src/main.cpp b/src/main.cpp index 06771fe..f9bc154 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,12 +1,85 @@ #include "app.hpp" +#include +#include +#include + using namespace blank; +namespace { + +enum Mode { + NORMAL, + FRAME_LIMIT, + TIME_LIMIT, + FIXED_FRAME_LIMIT, +}; + +} + + int main(int argc, char *argv[]) { + Mode mode = NORMAL; + size_t n = 0, t = 0; + + bool error = false; + for (int i = 1; i < argc; ++i) { + if (argv[i] == nullptr || argv[i][0] == '\0') continue; + if (argv[i][0] == '-') { + if (argv[i][1] == 't' && argv[i][2] == '\0') { + ++i; + if (i >= argc) { + std::cerr << "missing argument to -t" << std::endl; + error = true; + } else { + t = std::strtoul(argv[i], nullptr, 10); + } + } else { + std::cerr << "unable to interpret argument " + << i << " (" << argv[i] << ")" << std::endl; + error = true; + } + } else if (std::isdigit(*argv[i])) { + n = std::strtoul(argv[i], nullptr, 10); + } else { + std::cerr << "unable to interpret argument " + << i << " (" << argv[i] << ")" << std::endl; + error = true; + } + } + + if (error) { + return 1; + } + + if (n > 0) { + if (t > 0) { + mode = FIXED_FRAME_LIMIT; + } else { + mode = FRAME_LIMIT; + } + } else if (t > 0) { + mode = TIME_LIMIT; + } + Application app; - app.Run(); + switch (mode) { + default: + case NORMAL: + app.Run(); + break; + case FRAME_LIMIT: + app.RunN(n); + break; + case TIME_LIMIT: + app.RunT(t); + break; + case FIXED_FRAME_LIMIT: + app.RunS(n, t); + break; + } return 0;