ff_i_cmdline

Command line manipulation.

Refer to pages Custom Tokens, ff_i_color, and ff_i_token for additional details.

References

struct CLI_ARGUMENTS GetArguments(string sCommandLine)
Parameters:
  • sCommandLine – Input commandline arguments, without arg0

Returns:

A CLI_ARGUMENTS struct

Tokenize the string. Delimiter is space, quoted strings not allowed.

Source code

// @code

#include "ff_i_console"

#include "x3_inc_string"

//! @struct CLI_ARGUMENTS
//! @brief Struct containing command line arguments.
struct CLI_ARGUMENTS
{
  int nCount;   //!< Argument count
  string sArg0; //!< Argument 0
  string sArg1; //!< Argument 1
  string sArg2; //!< Argument 2
  string sArg3; //!< Argument 3
  string sArg4; //!< Argument 4
};

// =============================================================================

//
//! @brief Tokenize the string. Delimiter is space, quoted strings not allowed.
//! @param sCommandLine Input commandline arguments, without arg0
//! @return A CLI_ARGUMENTS struct
struct CLI_ARGUMENTS GetArguments(string sCommandLine);
struct CLI_ARGUMENTS GetArguments(string sCommandLine)
{
  struct CLI_ARGUMENTS retval;
  string sDelimiter = " ";

  sCommandLine = GetStringTrim(GetStringLowerCase(sCommandLine));

  // If no token, return
  if (sCommandLine == "")
    return retval;

  int nSubStr = FindSubString(sCommandLine, sDelimiter, 0);
  if (nSubStr == -1)
  {
    retval.nCount = 0;
    retval.sArg0 = GetStringTrim(sCommandLine);
    return retval;
  }

  string sParsed = StringParse(sCommandLine, sDelimiter);
  sCommandLine = StringRemoveParsed(sCommandLine, sParsed, sDelimiter);
  retval.sArg0 = sParsed;

  while (sCommandLine != "")
  {
    sParsed = StringParse(sCommandLine, sDelimiter);
    sCommandLine = StringRemoveParsed(sCommandLine, sParsed, sDelimiter);
    if (FALSE) {}
    else if (retval.nCount == 0) { retval.nCount++; retval.sArg1 = sParsed; }
    else if (retval.nCount == 1) { retval.nCount++; retval.sArg2 = sParsed; }
    else if (retval.nCount == 2) { retval.nCount++; retval.sArg3 = sParsed; }
    else if (retval.nCount == 3) { retval.nCount++; retval.sArg4 = sParsed; }
    else if (retval.nCount > 3) { return retval; } // NOTE/TODO: Currently, nothing has more than 3 arguments
  }
  return retval;
}