#include <attn/attn_config.hpp> #include <algorithm> #include <string> /** @brief Search the command line arguments for an option */ bool getCliOption(char** i_begin, char** i_end, const std::string& i_option) { return (i_end != std::find(i_begin, i_end, i_option)); } /** @brief Search the command line arguments for a setting value */ char* getCliSetting(char** i_begin, char** i_end, const std::string& i_setting) { char** value = std::find(i_begin, i_end, i_setting); return (value != i_end && ++value != i_end) ? *value : 0; } /** @brief Parse command line for configuration flags */ void parseConfig(char** i_begin, char** i_end, attn::Config* o_config) { char* setting; // --all on/off takes precedence over individual settings setting = getCliSetting(i_begin, i_end, "--all"); if (nullptr != setting) { if (std::string("off") == setting) { o_config->clearFlagAll(); } if (std::string("on") == setting) { o_config->setFlagAll(); } } // Parse individual options else { setting = getCliSetting(i_begin, i_end, "--vital"); if (nullptr != setting) { if (std::string("off") == setting) { o_config->clearFlag(attn::enVital); } if (std::string("on") == setting) { o_config->setFlag(attn::enVital); } } setting = getCliSetting(i_begin, i_end, "--checkstop"); if (nullptr != setting) { if (std::string("off") == setting) { o_config->clearFlag(attn::enCheckstop); } if (std::string("on") == setting) { o_config->setFlag(attn::enCheckstop); } } setting = getCliSetting(i_begin, i_end, "--terminate"); if (nullptr != setting) { if (std::string("off") == setting) { o_config->clearFlag(attn::enTerminate); } if (std::string("on") == setting) { o_config->setFlag(attn::enTerminate); } } setting = getCliSetting(i_begin, i_end, "--breakpoints"); if (nullptr != setting) { if (std::string("off") == setting) { o_config->clearFlag(attn::enBreakpoints); } if (std::string("on") == setting) { o_config->setFlag(attn::enBreakpoints); } } // This option determines whether we service a TI or breakpoint in the // case where TI info is available but not valid. The default setting // of this is "clear" meaning we will handle breakpoint by default. // This flag is not affected by the set/clear all command line option. if (true == getCliOption(i_begin, i_end, "--defaultti")) { o_config->setFlag(attn::dfltTi); } setting = getCliSetting(i_begin, i_end, "--clrattnintr"); if (nullptr != setting) { if (std::string("off") == setting) { o_config->clearFlag(attn::enClrAttnIntr); } if (std::string("on") == setting) { o_config->setFlag(attn::enClrAttnIntr); } } } }