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