]> git.localhorst.tv Git - blank.git/blobdiff - src/main.cpp
control (some) application parameters via cmdline
[blank.git] / src / main.cpp
index 06771fe8c4b76d1df04ee9292dd92088eb2428d0..f9bc154739fa57a0045f8e6bbd991782367cc9d7 100644 (file)
@@ -1,12 +1,85 @@
 #include "app.hpp"
 
+#include <cctype>
+#include <cstdlib>
+#include <iostream>
+
 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;