xref: /openbmc/openpower-hw-diags/cli.cpp (revision 7212d21db10901ffa078747c0f288f3341369d21)
1*7212d21dSBen Tyner #include <algorithm>
2*7212d21dSBen Tyner #include <string>
3*7212d21dSBen Tyner 
4*7212d21dSBen Tyner /** @brief Search the command line arguments for an option */
5*7212d21dSBen Tyner bool getCliOption(char** i_begin, char** i_end, const std::string& i_option)
6*7212d21dSBen Tyner {
7*7212d21dSBen Tyner     return (i_end != std::find(i_begin, i_end, i_option));
8*7212d21dSBen Tyner }
9*7212d21dSBen Tyner 
10*7212d21dSBen Tyner /** @brief Search the command line arguments for a setting value */
11*7212d21dSBen Tyner char* getCliSetting(char** i_begin, char** i_end, const std::string& i_setting)
12*7212d21dSBen Tyner {
13*7212d21dSBen Tyner     char** value = std::find(i_begin, i_end, i_setting);
14*7212d21dSBen Tyner     return (value != i_end && ++value != i_end) ? *value : 0;
15*7212d21dSBen Tyner }
16*7212d21dSBen Tyner 
17*7212d21dSBen Tyner /** @brief Parse command line for configuration flags */
18*7212d21dSBen Tyner void parseConfig(char** i_begin, char** i_end, bool& o_vital, bool& o_checkstop,
19*7212d21dSBen Tyner                  bool& o_terminate, bool& o_breakpoints)
20*7212d21dSBen Tyner {
21*7212d21dSBen Tyner     char* setting;
22*7212d21dSBen Tyner 
23*7212d21dSBen Tyner     // --all on/off takes precedence over individual settings
24*7212d21dSBen Tyner     setting = getCliSetting(i_begin, i_end, "--all");
25*7212d21dSBen Tyner     if (nullptr != setting)
26*7212d21dSBen Tyner     {
27*7212d21dSBen Tyner         if (std::string("off") == setting)
28*7212d21dSBen Tyner         {
29*7212d21dSBen Tyner             o_vital       = false;
30*7212d21dSBen Tyner             o_checkstop   = false;
31*7212d21dSBen Tyner             o_terminate   = false;
32*7212d21dSBen Tyner             o_breakpoints = false;
33*7212d21dSBen Tyner         }
34*7212d21dSBen Tyner 
35*7212d21dSBen Tyner         if (std::string("on") == setting)
36*7212d21dSBen Tyner         {
37*7212d21dSBen Tyner             o_vital       = true;
38*7212d21dSBen Tyner             o_checkstop   = true;
39*7212d21dSBen Tyner             o_terminate   = true;
40*7212d21dSBen Tyner             o_breakpoints = true;
41*7212d21dSBen Tyner         }
42*7212d21dSBen Tyner     }
43*7212d21dSBen Tyner     // Parse individual options
44*7212d21dSBen Tyner     else
45*7212d21dSBen Tyner     {
46*7212d21dSBen Tyner         setting = getCliSetting(i_begin, i_end, "--vital");
47*7212d21dSBen Tyner         if (std::string("off") == setting)
48*7212d21dSBen Tyner         {
49*7212d21dSBen Tyner             o_vital = false;
50*7212d21dSBen Tyner         }
51*7212d21dSBen Tyner         if (std::string("on") == setting)
52*7212d21dSBen Tyner         {
53*7212d21dSBen Tyner             o_vital = true;
54*7212d21dSBen Tyner         }
55*7212d21dSBen Tyner 
56*7212d21dSBen Tyner         setting = getCliSetting(i_begin, i_end, "--checkstop");
57*7212d21dSBen Tyner         if (std::string("off") == setting)
58*7212d21dSBen Tyner         {
59*7212d21dSBen Tyner             o_checkstop = false;
60*7212d21dSBen Tyner         }
61*7212d21dSBen Tyner         if (std::string("on") == setting)
62*7212d21dSBen Tyner         {
63*7212d21dSBen Tyner             o_checkstop = true;
64*7212d21dSBen Tyner         }
65*7212d21dSBen Tyner 
66*7212d21dSBen Tyner         setting = getCliSetting(i_begin, i_end, "--terminate");
67*7212d21dSBen Tyner         if (std::string("off") == setting)
68*7212d21dSBen Tyner         {
69*7212d21dSBen Tyner             o_terminate = false;
70*7212d21dSBen Tyner         }
71*7212d21dSBen Tyner         if (std::string("on") == setting)
72*7212d21dSBen Tyner         {
73*7212d21dSBen Tyner             o_terminate = true;
74*7212d21dSBen Tyner         }
75*7212d21dSBen Tyner 
76*7212d21dSBen Tyner         setting = getCliSetting(i_begin, i_end, "--breakpoints");
77*7212d21dSBen Tyner         if (std::string("off") == setting)
78*7212d21dSBen Tyner         {
79*7212d21dSBen Tyner             o_breakpoints = false;
80*7212d21dSBen Tyner         }
81*7212d21dSBen Tyner         if (std::string("on") == setting)
82*7212d21dSBen Tyner         {
83*7212d21dSBen Tyner             o_breakpoints = true;
84*7212d21dSBen Tyner         }
85*7212d21dSBen Tyner     }
86*7212d21dSBen Tyner }
87