bool CmdLineParser::token_to_fullkeyname(const string& token, string& fullkey) { fullkey = ""; int ctDashes = 0; if(starts_with(token, string("--"))) ctDashes = 2; else if(starts_with(token, string("-"))) ctDashes = 1; if(ctDashes == 0) return false; if(ctDashes == 2) { if(m_mapKeySwitch.find(token) == m_mapKeySwitch.end()) { vlogerror("Unrecognized key passed %s", token.c_str()); return false; } fullkey = token; } else if(ctDashes == 1) { if(m_mapShortcutKeys.find(token) == m_mapShortcutKeys.end()) { vlogerror("Unrecognized shortcut key passed %s", token.c_str()); return false; } fullkey = m_mapShortcutKeys[token]; } return (fullkey.length() > 0); }
bool CmdLineParser::addSwitch(const CmdSwitch& s) { CmdSwitch cmd = s; if(cmd.desc.length() == 0) { vlogerror("No description provided!"); return false; } //check input if(cmd.key.find("--") != 0 || cmd.key.length() < 3) { vlogerror("The input key is invalid. Please start with -- and keep a length >= 3"); return false; } if(m_mapKeySwitch.find(cmd.key) != m_mapKeySwitch.end()) { vlogerror("This key %s is taken already!", cmd.key.c_str()); return false; } if(cmd.shortcut.length() == 0) { string temp = "-" + cmd.key[2]; int i = 3; while(m_mapShortcutKeys.find(temp) != m_mapShortcutKeys.end() && (size_t)i < cmd.key.length()) { temp = "-" + s.key[i]; i++; } cmd.shortcut = temp; vloginfo("Automatic shortcut assigned %s to %s", temp.c_str(), cmd.key.c_str()); } if(s.istoggle) { cmd.default_value = string("false"); cmd.value = cmd.default_value; cmd.isvalid = true; } else { cmd.value = cmd.default_value; cmd.isvalid = false; } //add CmdSwitch* pcmd = new CmdSwitch(cmd); m_vSwitches.push_back(pcmd); m_mapShortcutKeys[s.shortcut] = cmd.key; m_mapKeySwitch[s.key] = pcmd; return true; }
void CLIB_DECL logerror(const char *format, ...) { va_list arg; va_start(arg, format); vlogerror(format, arg); va_end(arg); }
void diablo_hd_device::logprintf(int level, const char* format, ...) { if (level > m_log_level) return; va_list ap; va_start(ap, format); vlogerror(format, ap); va_end(ap); }
void CLIB_DECL logerror(const char *text,...) { va_list arg; /* standard vfprintf stuff here */ va_start(arg, text); vlogerror(text, arg); va_end(arg); }
void CLIB_DECL running_machine::logerror(const char *format, ...) { // process only if there is a target if (m_logerror_list.first() != NULL) { va_list arg; va_start(arg, format); vlogerror(format, arg); va_end(arg); } }
bool CmdLineParser::setDefaultKey(const char* key) { string strKey(key); if(!starts_with(strKey, "--")) strKey = "--" + strKey; if(m_mapKeySwitch.find(strKey) != m_mapKeySwitch.end()) { CmdSwitch* pcmd = m_mapKeySwitch[m_strDefaultKey]; if(pcmd != NULL) { if(pcmd->istoggle) { vlogerror("Boolean command line options can not be used as default keys"); return false; } } //set default key m_strDefaultKey = strKey; return true; } else return false; }
int CmdLineParser::parse(int argc, char* argv[]) { int i = 0; int ctOptions = 0; while(i < argc) { string key, val; bool iskey = false; string token = string(argv[i]); bool isNextTokenKey = false; if(i + 1 < argc) { string peeknext = string(argv[i+1]); if(starts_with(peeknext, "-") || starts_with(peeknext, "--")) { string fullkey; isNextTokenKey = token_to_fullkeyname(peeknext, fullkey); } } //full-key if(starts_with(token, string("--"))) { if(m_mapKeySwitch.find(token) == m_mapKeySwitch.end()) { vlogerror("Unrecognized key passed %s", token.c_str()); printHelp(); return -1; } key = token; iskey = true; } //shortcut else if(starts_with(token, "-")) { if(m_mapShortcutKeys.find(token) == m_mapShortcutKeys.end()) { vlogerror("Unrecognized shortcut key passed %s", token.c_str()); printHelp(); return -1; } key = m_mapShortcutKeys[token]; iskey = true; } //default key, the value for default key is the last argument else if(isNextTokenKey == false && m_strDefaultKey.length() > 0 && i == argc - 2) { if(m_mapKeySwitch.find(m_strDefaultKey) == m_mapKeySwitch.end()) { vlogerror("Unrecognized default key %s", m_strDefaultKey.c_str()); printHelp(); return -1; } vloginfo("Using default key: %s", m_strDefaultKey.c_str()); key = m_strDefaultKey; iskey = true; } //if iskey and needs param then read it if(iskey) { ctOptions++; if(key == "--help") { printHelp(); return 1; } //fetch value CmdSwitch* pcmd = m_mapKeySwitch[key]; //read next if(pcmd->istoggle) { pcmd->value = string("true"); pcmd->isvalid = true; } else { i++; pcmd->value = string(argv[i]); pcmd->isvalid = true; } } //next token i++; } //capture real app name if(argc > 0) { m_appname = string(argv[0]); } return ctOptions; }