C++ Library containing a lot of needful things: Stack Trace, Command Line Parser, Resource Handling, Configuration Files, Unix Command Execution, Directories, Regular Expressions, Tokenizer, Function Trace, Standard Extensions.
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
4.1 KiB
98 lines
4.1 KiB
/*! @file |
|
|
|
@id $Id$ |
|
*/ |
|
// 1 2 3 4 5 6 7 8 |
|
// 45678901234567890123456789012345678901234567890123456789012345678901234567890 |
|
|
|
#include <mrw/args> |
|
|
|
void test_func() { |
|
std::cout<<"test parameter was given on command line"<<std::endl; |
|
} |
|
|
|
int main(int argc, char** argv) try { |
|
|
|
// option variables |
|
bool flag(false); |
|
int r(5); |
|
std::string txt("Hello World"); |
|
int x(0), y(0); |
|
|
|
// bind and evaluate options |
|
#ifdef ARGS__OLD_PRE11_COMPILER |
|
mrw::args::list options; |
|
std::vector<std::shared_ptr<mrw::args::abstract_parameter> > params; |
|
params.push_back(mrw::args::help()); |
|
params.push_back(mrw::args::exit()); |
|
options.push_back(mrw::args::declaration("h", "help", "show this help", |
|
params)); |
|
params.clear(); |
|
params.push_back(mrw::args::param(r, "number")); |
|
options.push_back(mrw::args::declaration("r", "repeat", |
|
"number of repetitions", |
|
params)); |
|
params.clear(); |
|
params.push_back(mrw::args::param(flag)); |
|
options.push_back(mrw::args::declaration("f", "flag", "check a flag", |
|
params)); |
|
params.clear(); |
|
params.push_back(mrw::args::param(txt, "text")); |
|
options.push_back(mrw::args::declaration("t", "text", "pass a text", params)); |
|
params.clear(); |
|
params.push_back(mrw::args::param(x, "x")); |
|
params.push_back(mrw::args::param(y, "y")); |
|
options.push_back(mrw::args::declaration("c", "coord", |
|
"add some 2D coordinates", |
|
params)); |
|
params.clear(); |
|
params.push_back(mrw::args::func(test_func)); |
|
options.push_back(mrw::args::declaration("", "test", |
|
"call test_func, no shortcut", |
|
params)); |
|
mrw::args::parse(argc, argv, "This is an example for argument processing.", |
|
options); |
|
#else |
|
mrw::args::parse(argc, argv, |
|
"This is an example for argument processing. If the" |
|
" description is very long, it is automatically splitted" |
|
" over several lines and indented on each new line." |
|
" Arguments may have several parameters. Help is" |
|
" generated automatically from the argument declaration." |
|
" The argument declaration contains long and short options" |
|
" and a list of parameters.", |
|
{ |
|
{"h", "help", "show this help", |
|
{mrw::args::help(), mrw::args::exit()}}, |
|
{"r", "repeat", "number of repetitions", |
|
{mrw::args::param(r, "number")}}, |
|
{"f", "flag", |
|
"check a flag; this is a boolean, so it is false by " |
|
"default and true if the user specifies the flag on " |
|
"the command line", {mrw::args::param(flag)}}, |
|
{"t", "text", "pass a text", |
|
{mrw::args::param(txt, "text")}}, |
|
{"c", "coord", |
|
"add some 2D coordinates; this is an example on how " |
|
"you can add more than one parameter", |
|
{mrw::args::param(x, "x"), |
|
mrw::args::param(y, "y")}}, |
|
{"", "test", "call test_func, no shortcut", |
|
{mrw::args::func(test_func)}}, |
|
}, |
|
"Returns a status of 0 on success and 1 on any error."); |
|
#endif |
|
|
|
// show the result |
|
std::cout<<std::endl |
|
<<"commandline is parsed, these are the settings now:"<<std::endl |
|
<<"r = "<<r<<std::endl |
|
<<"flag = "<<(flag?"yes":"no")<<std::endl |
|
<<"txt = "<<txt<<std::endl |
|
<<"coordinates = "<<x<<", "<<y<<std::endl; |
|
|
|
return 0; |
|
} catch (const std::exception& x) { |
|
std::cerr<<"**** ERROR: "<<x.what()<<std::endl; |
|
return 1; |
|
}
|
|
|