1+ #include " ParseCli.hxx"
2+ #include " LOG.hxx"
3+ #include " Singleton.hxx"
4+ #include " Settings.hxx"
5+
6+ // option identifiers
7+ enum
8+ {
9+ OPT_HELP,
10+ OPT_SKIPMENU,
11+ OPT_VIDEODRIVER
12+ };
13+
14+ // option array
15+ CSimpleOpt::SOption cmdline_options[] = {{OPT_SKIPMENU, (" --skipMenu" ), SO_NONE},
16+ {OPT_VIDEODRIVER, (" --video" ), SO_REQ_SEP},
17+ {OPT_HELP, (" --help" ), SO_NONE},
18+ {OPT_HELP, (" -h" ), SO_NONE},
19+ SO_END_OF_OPTIONS};
20+
21+ bool ParseCli::ProcessCommandLine (int argc, char *argv[])
22+ {
23+ CSimpleOpt args (argc, argv, cmdline_options);
24+ bool success = true ;
25+ while (args.Next ())
26+ {
27+ if (args.LastError () != SO_SUCCESS)
28+ {
29+ LOG (LOG_ERROR) << GetLastErrorText (args.LastError ()) << " " << args.OptionText ();
30+ success = false ;
31+ }
32+
33+ switch (args.OptionId ())
34+ {
35+ case OPT_HELP:
36+ ShowUsage ();
37+ return false ;
38+ case OPT_SKIPMENU:
39+ Settings::instance ().skipMenu = true ;
40+ break ;
41+ case OPT_VIDEODRIVER:
42+ if (args.OptionArg ())
43+ {
44+ Settings::instance ().videoDriver = args.OptionArg ();
45+ }
46+ else
47+ {
48+ LOG (LOG_ERROR) << " videoDriver not set" ;
49+ ShowUsage ();
50+ return false ;
51+ }
52+ break ;
53+ default :
54+ ShowUsage ();
55+ }
56+ }
57+
58+ return success;
59+ }
60+
61+ void ParseCli::ShowUsage ()
62+ {
63+ LOG (LOG_INFO) << " Usage: Cytopia [OPTIONS]" ;
64+ LOG (LOG_INFO) << " \t --help (this)" ;
65+ LOG (LOG_INFO) << " \t --skipMenu (Skips the main menu)" ;
66+ LOG (LOG_INFO) << " \t --video <videoDriver> (Sets a different video driver)" ;
67+ }
68+
69+ std::string ParseCli::GetLastErrorText (int a_nError)
70+ {
71+ switch (a_nError)
72+ {
73+ case SO_SUCCESS:
74+ return " Success" ;
75+ case SO_OPT_INVALID:
76+ return " Unrecognized option" ;
77+ case SO_OPT_MULTIPLE:
78+ return " Option matched multiple strings" ;
79+ case SO_ARG_INVALID:
80+ return " Option does not accept argument" ;
81+ case SO_ARG_INVALID_TYPE:
82+ return " Invalid argument format" ;
83+ case SO_ARG_MISSING:
84+ return " Required argument is missing" ;
85+ case SO_ARG_INVALID_DATA:
86+ return " Invalid argument data" ;
87+ default :
88+ return " Unknown error" ;
89+ }
90+ }
0 commit comments