96 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*! @file
 | |
| 
 | |
|     @id $Id$
 | |
| */
 | |
| //       1         2         3         4         5         6         7         8
 | |
| // 45678901234567890123456789012345678901234567890123456789012345678901234567890
 | |
| 
 | |
| #include <mrw/args.hxx>
 | |
| #ifdef MRW__OLD_PRE11_COMPILER
 | |
| #include <mrw/vector.hxx>
 | |
| #endif
 | |
| 
 | |
| 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);
 | |
| 
 | |
|   std::string description("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.");
 | |
|   std::string returns("Returns a status of 0 on success and 1 on any error.");
 | |
| 
 | |
|   // bind and evaluate options
 | |
| #ifdef MRW__OLD_PRE11_COMPILER
 | |
|   mrw::args::parse(argc, argv, description, mrw::args::defaults()
 | |
|                    <<mrw::args::decl("h", "help", "show this help",
 | |
|                                      mrw::args::decl::param_list()
 | |
|                                      <<mrw::args::help()
 | |
|                                      <<mrw::args::exit())
 | |
|                    <<mrw::args::decl("r", "repeat", "number of repetitions",
 | |
|                                      mrw::args::decl::param_list()
 | |
|                                      <<mrw::args::param(r, "number"))
 | |
|                    <<mrw::args::decl("f", "flag", "check a flag",
 | |
|                                      mrw::args::decl::param_list()
 | |
|                                      <<mrw::args::param(flag))
 | |
|                    <<mrw::args::decl("t", "text", "pass a text",
 | |
|                                      mrw::args::decl::param_list()
 | |
|                                      <<mrw::args::param(txt, "text"))
 | |
|                    <<mrw::args::decl("c", "coord", "add some 2D coordinates",
 | |
|                                      mrw::args::decl::param_list()
 | |
|                                      <<mrw::args::param(x, "x")
 | |
|                                      <<mrw::args::param(y, "y"))
 | |
|                    <<mrw::args::decl("",  "test", "call test_func, no shortcut",
 | |
|                                      mrw::args::decl::param_list()
 | |
|                                      <<mrw::args::func(test_func)),
 | |
|                    returns);
 | |
| #else
 | |
|   mrw::args::parse(argc, argv,
 | |
|                    description,
 | |
|                    {
 | |
|                      {"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);
 | |
| #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;
 | |
|  }
 |