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