]> git.localhorst.tv Git - blank.git/blob - src/main.cpp
control (some) application parameters via cmdline
[blank.git] / src / main.cpp
1 #include "app.hpp"
2
3 #include <cctype>
4 #include <cstdlib>
5 #include <iostream>
6
7 using namespace blank;
8
9
10 namespace {
11
12 enum Mode {
13         NORMAL,
14         FRAME_LIMIT,
15         TIME_LIMIT,
16         FIXED_FRAME_LIMIT,
17 };
18
19 }
20
21
22 int main(int argc, char *argv[]) {
23
24         Mode mode = NORMAL;
25         size_t n = 0, t = 0;
26
27         bool error = false;
28         for (int i = 1; i < argc; ++i) {
29                 if (argv[i] == nullptr || argv[i][0] == '\0') continue;
30                 if (argv[i][0] == '-') {
31                         if (argv[i][1] == 't' && argv[i][2] == '\0') {
32                                 ++i;
33                                 if (i >= argc) {
34                                         std::cerr << "missing argument to -t" << std::endl;
35                                         error = true;
36                                 } else {
37                                         t = std::strtoul(argv[i], nullptr, 10);
38                                 }
39                         } else {
40                                 std::cerr << "unable to interpret argument "
41                                         << i << " (" << argv[i] << ")" << std::endl;
42                                 error = true;
43                         }
44                 } else if (std::isdigit(*argv[i])) {
45                         n = std::strtoul(argv[i], nullptr, 10);
46                 } else {
47                         std::cerr << "unable to interpret argument "
48                                 << i << " (" << argv[i] << ")" << std::endl;
49                         error = true;
50                 }
51         }
52
53         if (error) {
54                 return 1;
55         }
56
57         if (n > 0) {
58                 if (t > 0) {
59                         mode = FIXED_FRAME_LIMIT;
60                 } else {
61                         mode = FRAME_LIMIT;
62                 }
63         } else if (t > 0) {
64                 mode = TIME_LIMIT;
65         }
66
67         Application app;
68         switch (mode) {
69                 default:
70                 case NORMAL:
71                         app.Run();
72                         break;
73                 case FRAME_LIMIT:
74                         app.RunN(n);
75                         break;
76                 case TIME_LIMIT:
77                         app.RunT(t);
78                         break;
79                 case FIXED_FRAME_LIMIT:
80                         app.RunS(n, t);
81                         break;
82         }
83
84         return 0;
85
86 }