str::str(const str& copy)
{
    // Allocate enough memory first
    this->init(copy.getLen());

    // Simply use assignment operator code above
    *this = copy;
}
void CommandProcessor::getHelpText(str& helpForCmd, str& output)
{
    // If there is a parameter, get help for this specific command
    // where this parameter itself is a command name
    if(helpForCmd.getLen() > 0)
    {
        output = CMD_INVALID_STR;
        for(unsigned int i=0; i < mCmdHandlerVector.size(); i++)
        {
            CmdProcessorType &cp = mCmdHandlerVector[i];
            if(helpForCmd.compareToIgnoreCase(cp.pCommandStr))
            {
                output = (0 == cp.pCmdHelpText || '\0' == cp.pCmdHelpText[0]) ? NO_HELP_STR : cp.pCmdHelpText;
                break;
            }
        }
    }
    else {
        getRegisteredCommandList(output);
    }
}
void CommandProcessor::pointToParameters(str& input, const char* pCmdToRemove)
{
    // There may be a space, so need to copy from after the space if it exists
    const int cmdLen = strlen(pCmdToRemove);
    input.eraseFirst( input.getLen() > cmdLen ? cmdLen+1 : cmdLen);
}