Commit c9163e3a authored by jan.koester's avatar jan.koester
Browse files

fixed

parent db44b426
Loading
Loading
Loading
Loading
+40 −29
Original line number Diff line number Diff line
@@ -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;
                }
            }
        }