Loading src/cmdplus.cpp +40 −29 Original line number Diff line number Diff line Loading @@ -138,54 +138,65 @@ void cmdplus::CmdController::registerCmd(const std::string &key, const char skey registerCmd(key,skey,required,buf,help); } void cmdplus::CmdController::registerCmd(const std::string &key, const char skey, bool required, int defaultvalue, const std::string &help) { char buf[255]; snprintf(buf,255,"%d",defaultvalue); registerCmd(key, skey, required, buf, help); } void cmdplus::CmdController::parseCmd(int argc, char** argv) { for (int args = 1; args < argc; args++) { int keytype = -1; if (argv[args][0] == '-' && argv[args][1] == '-') { keytype = KTKEY; keytype = KTKEY; // --longkey } else if (argv[args][0] == '-') { keytype = KTSKEY; keytype = KTSKEY; // -s } else { break; } unsigned long kendpos = strlen(argv[args]); for (unsigned long cmdpos = 0; cmdpos < strlen(argv[args])+1; cmdpos++) { switch (argv[args][cmdpos]) { case '=': { if (keytype == KTKEY) { for (unsigned long cmdpos = 2; cmdpos < strlen(argv[args]); cmdpos++) { if (argv[args][cmdpos] == '=') { kendpos = cmdpos; }; break; } } } char *key = nullptr; std::string key; char skey = '0'; if (keytype == KTKEY) { key = new char[kendpos-1]; memcpy(key,argv[args] +2,kendpos-2); key[kendpos - 2] = '\0'; std::copy(&argv[args][2], &argv[args][kendpos], std::back_inserter(key)); } else if (keytype == KTSKEY) { skey = argv[args][1]; if (strlen(argv[args]) > 2) { return; } } for (Cmd *curcmd = _firstCmd.get(); curcmd; curcmd = curcmd->nextCmd()) { if (keytype == KTKEY) { if (key == curcmd->getKey()) { curcmd->_Found = true; std::copy(argv[args]+(kendpos+1),argv[args]+(strlen(argv[args])-(kendpos+1)),std::back_inserter(curcmd->_Value)); curcmd->_Value.clear(); unsigned long val_start = kendpos + 1; unsigned long val_end = strlen(argv[args]); if (val_start < val_end) { std::copy(&argv[args][val_start], &argv[args][val_end], std::back_inserter(curcmd->_Value)); } break; } } else if (keytype == KTSKEY) { if (curcmd->getShortkey() == skey) { curcmd->_Found = true; curcmd->_Value.clear(); if (++args < argc) { std::copy(argv[args],argv[args]+strlen(argv[args]),std::back_inserter(curcmd->_Value)); unsigned long val_len = strlen(argv[args]); std::copy(&argv[args][0], &argv[args][val_len], std::back_inserter(curcmd->_Value)); } break; } } } Loading Loading
src/cmdplus.cpp +40 −29 Original line number Diff line number Diff line Loading @@ -138,54 +138,65 @@ void cmdplus::CmdController::registerCmd(const std::string &key, const char skey registerCmd(key,skey,required,buf,help); } void cmdplus::CmdController::registerCmd(const std::string &key, const char skey, bool required, int defaultvalue, const std::string &help) { char buf[255]; snprintf(buf,255,"%d",defaultvalue); registerCmd(key, skey, required, buf, help); } void cmdplus::CmdController::parseCmd(int argc, char** argv) { for (int args = 1; args < argc; args++) { int keytype = -1; if (argv[args][0] == '-' && argv[args][1] == '-') { keytype = KTKEY; keytype = KTKEY; // --longkey } else if (argv[args][0] == '-') { keytype = KTSKEY; keytype = KTSKEY; // -s } else { break; } unsigned long kendpos = strlen(argv[args]); for (unsigned long cmdpos = 0; cmdpos < strlen(argv[args])+1; cmdpos++) { switch (argv[args][cmdpos]) { case '=': { if (keytype == KTKEY) { for (unsigned long cmdpos = 2; cmdpos < strlen(argv[args]); cmdpos++) { if (argv[args][cmdpos] == '=') { kendpos = cmdpos; }; break; } } } char *key = nullptr; std::string key; char skey = '0'; if (keytype == KTKEY) { key = new char[kendpos-1]; memcpy(key,argv[args] +2,kendpos-2); key[kendpos - 2] = '\0'; std::copy(&argv[args][2], &argv[args][kendpos], std::back_inserter(key)); } else if (keytype == KTSKEY) { skey = argv[args][1]; if (strlen(argv[args]) > 2) { return; } } for (Cmd *curcmd = _firstCmd.get(); curcmd; curcmd = curcmd->nextCmd()) { if (keytype == KTKEY) { if (key == curcmd->getKey()) { curcmd->_Found = true; std::copy(argv[args]+(kendpos+1),argv[args]+(strlen(argv[args])-(kendpos+1)),std::back_inserter(curcmd->_Value)); curcmd->_Value.clear(); unsigned long val_start = kendpos + 1; unsigned long val_end = strlen(argv[args]); if (val_start < val_end) { std::copy(&argv[args][val_start], &argv[args][val_end], std::back_inserter(curcmd->_Value)); } break; } } else if (keytype == KTSKEY) { if (curcmd->getShortkey() == skey) { curcmd->_Found = true; curcmd->_Value.clear(); if (++args < argc) { std::copy(argv[args],argv[args]+strlen(argv[args]),std::back_inserter(curcmd->_Value)); unsigned long val_len = strlen(argv[args]); std::copy(&argv[args][0], &argv[args][val_len], std::back_inserter(curcmd->_Value)); } break; } } } Loading