diff options
-rw-r--r-- | src/paramproc.cpp | 82 | ||||
-rw-r--r-- | src/paramproc.h | 9 | ||||
-rw-r--r-- | src/test/param.cpp | 22 |
3 files changed, 101 insertions, 12 deletions
diff --git a/src/paramproc.cpp b/src/paramproc.cpp index eaaf466..85274e2 100644 --- a/src/paramproc.cpp +++ b/src/paramproc.cpp | |||
@@ -141,6 +141,12 @@ void ParamProc::addParam( const char *lpWord, char cChar, Proc proc, | |||
141 | as->sValue = lpValue; | 141 | as->sValue = lpValue; |
142 | 142 | ||
143 | lArg.push_back( as ); | 143 | lArg.push_back( as ); |
144 | |||
145 | if( !lBan.empty() ) | ||
146 | { | ||
147 | if( lBan.back()->pBefore == NULL ) | ||
148 | lBan.back()->pBefore = as; | ||
149 | } | ||
144 | } | 150 | } |
145 | 151 | ||
146 | void ParamProc::addParam( const char *lpWord, char cChar, Proc proc, | 152 | void ParamProc::addParam( const char *lpWord, char cChar, Proc proc, |
@@ -203,7 +209,7 @@ void ParamProc::process( int argc, char *argv[] ) | |||
203 | { | 209 | { |
204 | for( int arg = 1; arg < argc; arg++ ) | 210 | for( int arg = 1; arg < argc; arg++ ) |
205 | { | 211 | { |
206 | printf(":::%d:::%s\n", arg, argv[arg] ); | 212 | //printf(":::%d:::%s\n", arg, argv[arg] ); |
207 | if( argv[arg][0] == '-' ) | 213 | if( argv[arg][0] == '-' ) |
208 | { | 214 | { |
209 | if( argv[arg][1] == '-' ) | 215 | if( argv[arg][1] == '-' ) |
@@ -270,6 +276,10 @@ void ParamProc::process( int argc, char *argv[] ) | |||
270 | } | 276 | } |
271 | continue; | 277 | continue; |
272 | } | 278 | } |
279 | else | ||
280 | { | ||
281 | unknownParam( argc-arg, argv+arg ); | ||
282 | } | ||
273 | } | 283 | } |
274 | else | 284 | else |
275 | { | 285 | { |
@@ -347,15 +357,23 @@ void ParamProc::process( int argc, char *argv[] ) | |||
347 | } | 357 | } |
348 | } | 358 | } |
349 | } | 359 | } |
360 | else | ||
361 | { | ||
362 | unknownParam( argc-arg, argv+arg ); | ||
363 | } | ||
350 | } | 364 | } |
351 | } | 365 | } |
352 | } | 366 | } |
367 | else | ||
368 | { | ||
369 | cmdParam( argc-arg, argv+arg ); | ||
370 | } | ||
353 | } | 371 | } |
354 | } | 372 | } |
355 | 373 | ||
356 | ParamProc::ArgSpec *ParamProc::checkWord( const char *arg ) | 374 | ParamProc::ArgSpec *ParamProc::checkWord( const char *arg ) |
357 | { | 375 | { |
358 | printf("Checking \"%s\"...\n", arg ); | 376 | //printf("Checking \"%s\"...\n", arg ); |
359 | std::list<ArgSpec *>::const_iterator i; | 377 | std::list<ArgSpec *>::const_iterator i; |
360 | for( i = lArg.begin(); i != lArg.end(); i++ ) | 378 | for( i = lArg.begin(); i != lArg.end(); i++ ) |
361 | { | 379 | { |
@@ -380,7 +398,7 @@ ParamProc::ArgSpec *ParamProc::checkWord( const char *arg ) | |||
380 | 398 | ||
381 | ParamProc::ArgSpec *ParamProc::checkLetr( const char arg ) | 399 | ParamProc::ArgSpec *ParamProc::checkLetr( const char arg ) |
382 | { | 400 | { |
383 | printf("Checking \'%c\'...\n", arg ); | 401 | //printf("Checking \'%c\'...\n", arg ); |
384 | std::list<ArgSpec *>::const_iterator i; | 402 | std::list<ArgSpec *>::const_iterator i; |
385 | for( i = lArg.begin(); i != lArg.end(); i++ ) | 403 | for( i = lArg.begin(); i != lArg.end(); i++ ) |
386 | { | 404 | { |
@@ -408,6 +426,62 @@ int ParamProc::unknownParam( int argc, char *argv[] ) | |||
408 | 426 | ||
409 | int ParamProc::help( int argc, char *argv[] ) | 427 | int ParamProc::help( int argc, char *argv[] ) |
410 | { | 428 | { |
411 | // Insert help here later on | 429 | std::list<Banner *>::const_iterator b = lBan.begin(); |
430 | std::list<ArgSpec *>::const_iterator i; | ||
431 | int len=0; | ||
432 | for( i = lArg.begin(); i != lArg.end(); i++ ) | ||
433 | { | ||
434 | if( len < (*i)->sWord.getLength() ) | ||
435 | len = (*i)->sWord.getLength(); | ||
436 | } | ||
437 | char fmt[10]; | ||
438 | sprintf( fmt, "%%-%ds ", len ); | ||
439 | |||
440 | for( i = lArg.begin(); i != lArg.end(); i++ ) | ||
441 | { | ||
442 | if( b != lBan.end() ) | ||
443 | { | ||
444 | if( (*b)->pBefore == (*i) ) | ||
445 | { | ||
446 | printf( (*b)->sBanner.getString() ); | ||
447 | b++; | ||
448 | } | ||
449 | } | ||
450 | printf(" "); | ||
451 | if( (*i)->cChar ) | ||
452 | { | ||
453 | printf("-%c, ", (*i)->cChar ); | ||
454 | } | ||
455 | else | ||
456 | { | ||
457 | printf(" "); | ||
458 | } | ||
459 | if( (*i)->sWord.getString() ) | ||
460 | { | ||
461 | printf("--"); | ||
462 | printf( fmt, (*i)->sWord.getString() ); | ||
463 | } | ||
464 | else | ||
465 | { | ||
466 | printf(" "); | ||
467 | printf(fmt, "" ); | ||
468 | } | ||
469 | printf("%s\n", (*i)->sDesc.getString() ); | ||
470 | } | ||
471 | if( b != lBan.end() ) | ||
472 | { | ||
473 | if( (*b)->pBefore == NULL ) | ||
474 | { | ||
475 | printf( (*b)->sBanner.getString() ); | ||
476 | } | ||
477 | } | ||
478 | } | ||
479 | |||
480 | void ParamProc::addHelpBanner( const char *sHelpBanner ) | ||
481 | { | ||
482 | Banner *pBan = new Banner; | ||
483 | pBan->sBanner = sHelpBanner; | ||
484 | pBan->pBefore = NULL; | ||
485 | lBan.push_back( pBan ); | ||
412 | } | 486 | } |
413 | 487 | ||
diff --git a/src/paramproc.h b/src/paramproc.h index d462eac..d857193 100644 --- a/src/paramproc.h +++ b/src/paramproc.h | |||
@@ -127,6 +127,9 @@ public: | |||
127 | ); | 127 | ); |
128 | 128 | ||
129 | void process( int argc, char *argv[] ); | 129 | void process( int argc, char *argv[] ); |
130 | void addHelpBanner( const char *sHelpBanner ); | ||
131 | |||
132 | private: | ||
130 | ArgSpec *checkWord( const char *arg ); | 133 | ArgSpec *checkWord( const char *arg ); |
131 | ArgSpec *checkLetr( const char arg ); | 134 | ArgSpec *checkLetr( const char arg ); |
132 | 135 | ||
@@ -136,6 +139,12 @@ public: | |||
136 | virtual int help( int argc, char *argv[] ); | 139 | virtual int help( int argc, char *argv[] ); |
137 | 140 | ||
138 | private: | 141 | private: |
142 | typedef struct Banner | ||
143 | { | ||
144 | StaticString sBanner; | ||
145 | ArgSpec *pBefore; | ||
146 | } Banner; | ||
147 | std::list<Banner *> lBan; | ||
139 | std::list<ArgSpec *> lArg; | 148 | std::list<ArgSpec *> lArg; |
140 | }; | 149 | }; |
141 | 150 | ||
diff --git a/src/test/param.cpp b/src/test/param.cpp index 0641f90..a4d2824 100644 --- a/src/test/param.cpp +++ b/src/test/param.cpp | |||
@@ -3,12 +3,16 @@ | |||
3 | 3 | ||
4 | Param::Param() | 4 | Param::Param() |
5 | { | 5 | { |
6 | addParam( "name", 's', mkproc( Param::printStuff ), &str ); | 6 | addHelpBanner("param - A test of the libbu++ parameter systems\n" |
7 | "Enjoy with care and caution\n\nTest stuff:\n"); | ||
8 | addParam( "name", 's', mkproc( Param::printStuff ), &str, "Test a param param" ); | ||
7 | //addParam( "name", &str ); | 9 | //addParam( "name", &str ); |
8 | addParam( "job", 'U', mkproc( Param::printStuff ) ); | 10 | addParam( "job", 'U', mkproc( Param::printStuff ), "Test a paramless param" ); |
9 | 11 | ||
10 | // --name=Bobo | 12 | addHelpBanner("\nInformational:\n"); |
11 | // --job hello | 13 | addParam( "help", mkproc( ParamProc::help ), "Help!" ); |
14 | |||
15 | addHelpBanner("\nThanks for trying my test!\n\n"); | ||
12 | } | 16 | } |
13 | 17 | ||
14 | Param::~Param() | 18 | Param::~Param() |
@@ -30,11 +34,13 @@ int Param::printStuff( int argc, char *argv[] ) | |||
30 | 34 | ||
31 | int main( int argc, char *argv[] ) | 35 | int main( int argc, char *argv[] ) |
32 | { | 36 | { |
33 | printf("Starting...\n"); | 37 | if( argc == 1 ) |
38 | { | ||
39 | printf("You have to enter some parameter, try '--help'\n\n"); | ||
40 | return 0; | ||
41 | } | ||
42 | |||
34 | Param p; | 43 | Param p; |
35 | p.process( argc, argv ); | 44 | p.process( argc, argv ); |
36 | |||
37 | //printf("Calling by hand...\n"); | ||
38 | //p.printStuff(); | ||
39 | } | 45 | } |
40 | 46 | ||