Classes | List of all members
o2scl::cli Class Reference

Configurable command-line interface. More...

#include <cli.h>

Inheritance diagram for o2scl::cli:
o2scl::cli_readline

Detailed Description

This class is experimental.

Default commands: help, get/set, quit, exit, '!', verbose, license, warranty, alias, run.

Note that if the shell command is allowed (as it is by default) there are some potential security issues which are not solved here.

Commands which begin with a '#' character are ignored.

Note
In interactive mode, commands are limited to 300 characters.
Idea for Future:

Warn in run_interactive() when extra parameters are given

Include a "remove command" function

A replace command function, there's already some code in cli.cpp for this.

There's some code duplication between comm_option_run() and run_interactive()

Allow the user to set the tilde string

Disallow direct access to o2scl::cli::par_list in order to ensure parameter names do not contain whitespace

Concepts

As a matter of definition, the command-line arguments are simply called arguments. These arguments may be options (in which case they begin with either one dash or two) or parameters to these options. When run in interactive mode, these options are also commands.

Definition at line 230 of file cli.h.

Classes

class  parameter
 Parameter for o2scl::cli. More...
 
class  parameter_bool
 String parameter for o2scl::cli. More...
 
class  parameter_double
 Double parameter for o2scl::cli. More...
 
class  parameter_int
 Integer parameter for o2scl::cli. More...
 
class  parameter_size_t
 Integer parameter for o2scl::cli. More...
 
class  parameter_string
 String parameter for o2scl::cli. More...
 

Public Member Functions

Basic operation
int set_comm_option (comm_option_s &ic)
 Add a new command. More...
 
void remove_comm_option (std::string cmd)
 Remove a command with long name cmd.
 
template<class vec_t >
int set_comm_option_vec (size_t list_size, vec_t &option_list)
 Add a vector containing new commands/options.
 
int set_param_help (std::string param, std::string help)
 Set one-line help text for a parameter named param.
 
int run_auto (int argc, char *argv[], int debug=0)
 Automatically parse arguments to main and call interactive mode if required.
 
virtual char * cli_gets (const char *c)
 The function which obtains input from the user. More...
 
int call_args (std::vector< cmd_line_arg > &ca, int debug=0)
 Call functions corresponding to command-line args.
 
int process_args_c (int argc, char *argv[], std::vector< cmd_line_arg > &ca, int debug=0, bool also_call_args=false)
 Process command-line arguments from a const char array. More...
 
int parse_for_aliases (std::vector< std::string > &svsv)
 
int process_args (std::vector< std::string > &sv, std::vector< cmd_line_arg > &ca, int debug, bool also_call_args=false)
 Process command-line arguments from a vector of strings. More...
 
int process_args_str (std::string s, std::vector< cmd_line_arg > &ca, int debug=0, bool also_call_args=false)
 Process command-line arguments from a string. More...
 
int set_verbose (int v)
 Set verbosity. More...
 
int run_interactive ()
 Run the interactive mode.
 
int set_alias (std::string alias, std::string str)
 Set an alias alias for the string str. More...
 
std::string get_alias (std::string alias)
 Set an alias alias for the string str. More...
 
bool is_valid_option (std::string str)
 Return true if str is a valid option.
 

Public Attributes

The default command objects
comm_option_s c_commands
 
comm_option_s c_help
 
comm_option_s c_quit
 
comm_option_s c_exit
 
comm_option_s c_license
 
comm_option_s c_warranty
 
comm_option_s c_set
 
comm_option_s c_get
 
comm_option_s c_run
 
comm_option_s c_shell
 
comm_option_s c_no_intro
 
comm_option_s c_alias
 
bool sync_verbose
 If true, then sync cli::verbose, with a parameter of the same name.
 
bool shell_cmd_allowed
 If true, allow the user to use ! to execute a shell command (default true)
 
std::string prompt
 The prompt (default "> ")
 
std::string desc
 A one- or two-line description (default is empty string)
 
std::string cmd_name
 The name of the command.
 
std::string addl_help_cmd
 Additional help text for interactive mode (default is empty string)
 
std::string addl_help_cli
 Additional help text for command-line (default is empty string)
 

Static Public Attributes

Value to indicate whether commands are also command-line options
static const int comm_option_command =0
 
static const int comm_option_cl_param =1
 
static const int comm_option_both =2
 

Protected Attributes

Help for parameters
std::vector< std::string > ph_name
 
std::vector< std::string > ph_desc
 

Parameter storage and associated iterator type

typedef std::map< std::string, parameter *, std::greater< std::string > >::iterator par_t
 List iterator.
 
std::map< std::string, parameter *, std::less< std::string > > par_list
 Parameter list.
 
int verbose
 Control screen output.
 
char buf [300]
 Storage for getline.
 
comm_option_functuser_set_func
 Storage for the function to call after setting a parameter.
 
std::vector< comm_option_sclist
 List of commands.
 
int output_param_list ()
 Output the parameter list.
 

Aliases

typedef std::map< std::string, std::string, std::greater< std::string > >::iterator al_it
 
std::map< std::string, std::string, std::greater< std::string > > als
 
bool string_equal_dash (std::string s1, std::string s2)
 Compare two strings, treating dashes and underscores as equivalent.
 
 cli ()
 
virtual ~cli ()
 

The hard-coded command functions

std::string tilde_string
 String to replace tildes with.
 
bool gnu_intro
 If true, output the usual GNU intro when run_interactive() is called (default true). More...
 
int comm_option_alias (std::vector< std::string > &sv, bool itive_com)
 
int comm_option_commands (std::vector< std::string > &sv, bool itive_com)
 
int comm_option_get (std::vector< std::string > &sv, bool itive_com)
 
int comm_option_help (std::vector< std::string > &sv, bool itive_com)
 
int comm_option_license (std::vector< std::string > &sv, bool itive_com)
 
int comm_option_no_intro (std::vector< std::string > &sv, bool itive_com)
 
int comm_option_run (std::vector< std::string > &sv, bool itive_com)
 
int comm_option_shell (std::vector< std::string > &sv, bool itive_com)
 
int comm_option_set (std::vector< std::string > &sv, bool itive_com)
 
int comm_option_warranty (std::vector< std::string > &sv, bool itive_com)
 
int apply_aliases (std::vector< std::string > &sv, size_t istart, bool debug=false)
 Replace all occurences of sold with snew in sv.
 
int set_function (comm_option_funct &usf)
 Function to call when a set command is issued.
 

Member Function Documentation

◆ cli_gets()

virtual char* o2scl::cli::cli_gets ( const char *  c)
virtual
Idea for Future:
Think about whether or not this should be protected? (Possibly not, as it's extensively used by acolm.cpp)

Reimplemented in o2scl::cli_readline.

◆ get_alias()

std::string o2scl::cli::get_alias ( std::string  alias)

Aliases can also be set using the command 'alias', but that version allows only one-word aliases.

◆ process_args()

int o2scl::cli::process_args ( std::vector< std::string > &  sv,
std::vector< cmd_line_arg > &  ca,
int  debug,
bool  also_call_args = false 
)

This doesn't actually execute the functions for the corresponding options, but simply processes the arguments in sv and packs the information into ca.

◆ process_args_c()

int o2scl::cli::process_args_c ( int  argc,
char *  argv[],
std::vector< cmd_line_arg > &  ca,
int  debug = 0,
bool  also_call_args = false 
)

This doesn't actually execute the functions for the corresponding options, but simply processes the parameters argv and argv and packs the information into ca.

This function assumes that argc[0] just contains the name of the command, and should thus be ignored.

◆ process_args_str()

int o2scl::cli::process_args_str ( std::string  s,
std::vector< cmd_line_arg > &  ca,
int  debug = 0,
bool  also_call_args = false 
)
Idea for Future:
There's a typecast in this function to (char *) from (const char *) which needs reworking.

◆ set_alias()

int o2scl::cli::set_alias ( std::string  alias,
std::string  str 
)

Aliases can also be set using the command 'alias', but that version allows only one-word aliases.

◆ set_comm_option()

int o2scl::cli::set_comm_option ( comm_option_s ic)

Each command/option must have either a short form in comm_option_s::shrt or a long from in comm_option_s::lng, which is unique from the other commands/options already present. You cannot add two commands/options with the same short form, even if they have different long forms, and vice versa.

◆ set_verbose()

int o2scl::cli::set_verbose ( int  v)

Most errors are output to the screen even if verbose is zero.

Member Data Documentation

◆ gnu_intro

bool o2scl::cli::gnu_intro

In order to conform to GNU standards, this ought not be set to false by default.

Definition at line 448 of file cli.h.


The documentation for this class was generated from the following file:

Documentation generated with Doxygen. Provided under the GNU Free Documentation License (see License Information).