/*! @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 ;
}