Changeset 8805
- Timestamp:
- Sep 12, 2006, 4:20:15 PM (20 years ago)
- Location:
- trunk/psLib
- Files:
-
- 1 added
- 5 edited
-
src/types/psArguments.c (modified) (21 diffs)
-
test/types/Makefile.am (modified) (1 diff)
-
test/types/execute_tap (modified) (1 diff)
-
test/types/tap_psArguments_all.c (added)
-
test/types/tap_psMetadataItemCompare.c (modified) (19 diffs)
-
test/types/tst_psArguments.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/types/psArguments.c
r8627 r8805 7 7 * @author David Robbins, MHPCC 8 8 * 9 * @version $Revision: 1.1 1$ $Name: not supported by cvs2svn $10 * @date $Date: 2006-0 8-26 04:34:28$9 * @version $Revision: 1.12 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2006-09-13 02:20:15 $ 11 11 * 12 12 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 24 24 #include "psLogMsg.h" 25 25 #include "psTrace.h" 26 #include "psAssert.h" 26 27 27 28 #define NUM_SPACES 4 // Number of spaces between 28 29 29 30 // Set verbosity level 30 int psArgumentVerbosity(int *argc, char **argv) 31 int psArgumentVerbosity(int *argc, 32 char **argv) 31 33 { 32 34 int logLevel = 2; // Default log level 35 psLogSetLevel(logLevel); 36 PS_ASSERT_PTR_NON_NULL(argv, 2); 37 PS_ASSERT_PTR_NON_NULL(argc, 2); 33 38 int argnum = 0; // Argument number 34 39 … … 63 68 if ( (*argc < argnum + 3) ) { 64 69 psError(PS_ERR_IO, true, "-trace switch specified without facility and level."); 70 return logLevel; 65 71 } 66 72 psArgumentRemove(argnum, argc, argv); … … 71 77 if ((argnum = psArgumentGet(*argc, argv, "-trace-levels"))) { 72 78 psTracePrintLevels(); 73 exit(2); 79 // exit(2); 80 return logLevel; 74 81 } 75 82 … … 78 85 79 86 // Find the location of the specified argument 80 int psArgumentGet(int argc, char **argv, const char *arg) 81 { 87 int psArgumentGet(int argc, 88 char **argv, 89 const char *arg) 90 { 91 PS_ASSERT_PTR_NON_NULL(argv, 0); 92 PS_ASSERT_PTR_NON_NULL(arg, 0); 93 if (strlen(arg) == 0) 94 return 0; 82 95 for (int i = 1; i < argc; i++) { 83 96 if (!strcmp(argv[i], arg)) … … 89 102 90 103 // Remove the specified argument (by location) 91 bool psArgumentRemove(int argnum, int *argc, char **argv) 92 { 104 bool psArgumentRemove(int argnum, 105 int *argc, 106 char **argv) 107 { 108 PS_ASSERT_PTR_NON_NULL(argv, false); 109 PS_ASSERT_PTR_NON_NULL(argc, false); 93 110 if (argnum > 0) { 94 111 (*argc)--; … … 148 165 char **argv) 149 166 { 167 PS_ASSERT_PTR_NON_NULL(arguments, false); 168 PS_ASSERT_PTR_NON_NULL(argv, false); 169 PS_ASSERT_PTR_NON_NULL(argc, false); 170 if (*argc < 1) 171 return false; 150 172 // We need to do a bit of mucking around in order to preserve the arguments metadata until the last 151 173 // minute --- if there is a bad argument, we need to return the old "arguments", since they contain … … 174 196 } 175 197 176 psMetadataIterator *paramsIter = psMetadataIteratorAlloc(params, PS_LIST_HEAD, NULL);// Iter 198 psMetadataIterator *paramsIter = psMetadataIteratorAlloc(params, 199 PS_LIST_HEAD, NULL);// Iter 177 200 psMetadataItem *param = NULL; // Parameter from iteration 178 201 while ((param = psMetadataGetAndIncrement(paramsIter))) { … … 252 275 LENGTH_CASE(U16); 253 276 LENGTH_CASE(U32); 277 LENGTH_CASE(U64); 254 278 LENGTH_CASE(S8); 255 279 LENGTH_CASE(S16); 256 280 LENGTH_CASE(S32); 281 LENGTH_CASE(S64); 257 282 case PS_DATA_F32: 258 283 return arg->data.F32 >= 0 ? 12 : 13; // -d.dddddde?dd … … 264 289 return arg->data.V ? strlen(arg->data.V) : 0; 265 290 default: 266 psAbort(__func__, "Argument type (%x) is not supported.\n", arg->type); 291 psError(PS_ERR_BAD_PARAMETER_TYPE, true, 292 "Argument type (%x) is not supported.\n", arg->type); 293 return 0; 294 // psAbort(__func__, "Argument type (%x) is not supported.\n", arg->type); 267 295 } 268 296 … … 279 307 static void printValueComment(psMetadataItem *item, // Argument item for which to print 280 308 const char *comment, // Comment to print 281 unsigned int numSpaces // Number of spaces282 ) 309 unsigned int numSpaces) // Number of spaces 310 283 311 { 284 312 int valueLength = 0; // Length of the value portion … … 287 315 // Print the value 288 316 switch (item->type) { 289 PRINT_CASE(U8,"%d"); 290 PRINT_CASE(U16,"%d"); 291 PRINT_CASE(U32,"%d"); 317 PRINT_CASE(U8,"%u"); 318 PRINT_CASE(U16,"%u"); 319 PRINT_CASE(U32,"%u"); 320 PRINT_CASE(U64,"%lu"); 292 321 PRINT_CASE(S8,"%d"); 293 322 PRINT_CASE(S16,"%d"); 294 323 PRINT_CASE(S32,"%d"); 324 PRINT_CASE(S64,"%ld"); 295 325 PRINT_CASE(F32,"%.6e"); 296 326 PRINT_CASE(F64,"%.6e"); … … 308 338 break; 309 339 default: 310 psAbort(__func__, "Argument type (%x) for %s is not supported.\n", item->type, item->name); 340 // psAbort(__func__, "Argument type (%x) for %s is not supported.\n", 341 // item->type, item->name); 342 psError(PS_ERR_BAD_PARAMETER_TYPE, true, 343 "Argument type (%x) for %s is not supported.\n", item->type, item->name); 311 344 } 312 345 valueLength = argLength(item); … … 331 364 static void maxLength(int *maxName, // Maximum length of the name 332 365 int *maxValue, // Maximum length of the value 333 psMetadata *md // Metadata for which to check the length334 ) 366 psMetadata *md) // Metadata for which to check the length 367 335 368 { 336 369 psMetadataIterator *iter = psMetadataIteratorAlloc(md, PS_LIST_HEAD, NULL); // Iterator 337 370 psMetadataItem *item = NULL; // Item from iteration 338 while ((item = psMetadataGetAndIncrement(iter))) { 371 while ((item = psMetadataGetAndIncrement(iter))) 372 { 339 373 if (item->type == PS_DATA_METADATA) { 340 374 maxLength(maxName, maxValue, item->data.V); … … 357 391 void psArgumentHelp(psMetadata *arguments) 358 392 { 393 if (arguments == NULL) 394 return; 359 395 printf("Optional arguments, with default values:\n"); 360 396 int maxName = 4; // Maximum length of a name … … 384 420 psMetadataItem *multiCheck = psMetadataLookup(arguments, argItem->name); // Item to check for MULTI 385 421 if (multiCheck->type == PS_DATA_METADATA_MULTI) { 386 printValueComment(NULL, argItem->comment, maxValue + NUM_SPACES); 422 bool first = true; // Is this the first one? 423 psListIterator* iter = psListIteratorAlloc(multiCheck->data.list,PS_LIST_HEAD,true); 424 psMetadataItem* listItem; 425 int count = 0; 426 // while ((listItem=(psMetadataItem*)psListGetAndIncrement(iter)) != NULL) { 427 while ((listItem=(psMetadataItem*)psListGetAndIncrement(iter)) != NULL) { 428 // for (int i = 0; i < NUM_SPACES; i++) { 429 // printf(" "); 430 // } 431 // printf("%s", listItem->name); 432 // int position = strlen(listItem->name); // Number of spaces in 433 // for (int i = position; i < maxName + NUM_SPACES; i++) { 434 // printf(" "); 435 // } 436 if (!first) { 437 for (int i = 0; i < maxName + 2*NUM_SPACES; i++) { 438 printf(" "); 439 } 440 } 441 printValueComment(listItem, listItem->comment, maxValue + NUM_SPACES); 442 first = false; 443 count++; 444 // continue; 445 } 446 psFree(iter); 447 while (count > 1) { 448 argItem = psMetadataGetAndIncrement(argIter); 449 count--; 450 } 387 451 continue; 388 452 } … … 416 480 // we have log levels 1 (Error), 2 (Warning), 3 (Info), 4 (Details), 5 (Minutiae) 417 481 // 2 = default, -v = 3, -vv = 4, -vvv = 5 418 psS32 psLogArguments (int *argc, char **argv)419 { 420 482 psS32 psLogArguments (int *argc, 483 char **argv) 484 { 421 485 int N, level; 422 486 … … 424 488 level = 2; 425 489 490 psLogSetLevel (level); 491 PS_ASSERT_PTR_NON_NULL(argv, 2); 492 PS_ASSERT_PTR_NON_NULL(argc, 2); 426 493 // set in order, so that -vvv overrides -vv overrides -v 427 494 if ((N = psArgumentGet (*argc, argv, "-v"))) { … … 440 507 if ((N = psArgumentGet (*argc, argv, "-logfmt"))) { 441 508 if (*argc < N + 2) { 442 psAbort ("psLogArguments", "USAGE: -logfmt (format)"); 443 } 444 psArgumentRemove (N, argc, argv); 445 psLogSetFormat (argv[N]); // XXX EAM : this function should return an error if the log format is invalid 446 psArgumentRemove (N, argc, argv); 509 // psAbort ("psLogArguments", "USAGE: -logfmt (format)"); 510 psError(PS_ERR_IO, true, "-logfmt switch specified without a format."); 511 } else { 512 psArgumentRemove (N, argc, argv); 513 psLogSetFormat (argv[N]); // XXX EAM : this function should return an error if the log format is invalid 514 psArgumentRemove (N, argc, argv); 515 } 447 516 } 448 517 … … 453 522 454 523 // set trace levels by facility 455 psS32 psTraceArguments (int *argc, char **argv)456 { 457 524 psS32 psTraceArguments (int *argc, 525 char **argv) 526 { 458 527 int N; 528 PS_ASSERT_PTR_NON_NULL(argv, 0); 529 PS_ASSERT_PTR_NON_NULL(argc, 0); 459 530 460 531 // argument format is: -trace (facil) (level) 461 532 while ((N = psArgumentGet (*argc, argv, "-trace"))) { 462 533 if (*argc < N + 3) { 463 psAbort ("psTraceArguments", "USAGE: -trace (facility) (level)"); 534 // psAbort ("psTraceArguments", "USAGE: -trace (facility) (level)"); 535 psError(PS_ERR_IO, true, "-trace switch specified without facility and level."); 536 return 0; 464 537 } 465 538 psArgumentRemove (N, argc, argv); … … 470 543 if ((N = psArgumentGet (*argc, argv, "-trace-levels"))) { 471 544 psTracePrintLevels (); 472 exit (2); 545 // exit (2); 546 return 0; 473 547 } 474 548 return (TRUE); -
trunk/psLib/test/types/Makefile.am
r8797 r8805 23 23 tap_psMetadata_manip \ 24 24 tap_psMetadata_polynomials \ 25 tap_psArray_all 25 tap_psArray_all \ 26 tap_psArguments_all 26 27 27 28 check_DATA = \ -
trunk/psLib/test/types/execute_tap
r8786 r8805 11 11 ./tap_psMetadata_printing 12 12 ./tap_psMetadata_polynomials 13 ./tap_psArguments_all -
trunk/psLib/test/types/tap_psMetadataItemCompare.c
r8731 r8805 11 11 psMetadataItem *item = psMetadataItemAlloc("Snickers", PS_DATA_BOOL, "No Comment", true) 12 12 ; 13 plan_tests(2 1);13 plan_tests(22); 14 14 15 15 diag("psMetadataItemCompare() tests"); … … 18 18 { 19 19 ok( !psMetadataItemCompare(compare, item), 20 " return false for NULL compare input." );20 "psMetadataItemCompare: return false for NULL compare input." ); 21 21 } 22 22 //Return false for NULL template psMetadataItem 23 23 { 24 24 ok( !psMetadataItemCompare(item, template), 25 " return false for NULL template input." )25 "psMetadataItemCompare: return false for NULL template input." ) 26 26 ; 27 27 } … … 35 35 { 36 36 ok( !psMetadataItemCompare(template, item), 37 " return false for input with different names.")37 "psMetadataItemCompare: return false for input with different names.") 38 38 ; 39 39 } … … 42 42 { 43 43 ok( psMetadataItemCompare(itemCopy, item), 44 " return true for comparison of identical psMetadataItem's.");44 "psMetadataItemCompare: return true for comparison of identical psMetadataItem's."); 45 45 } 46 46 … … 48 48 { 49 49 ok( psMetadataItemCompare(compare, item), 50 " return true for valid compare of different type.");50 "psMetadataItemCompare: return true for valid compare of different type."); 51 51 } 52 52 … … 56 56 { 57 57 ok( psMetadataItemCompare(compare, item), 58 " return false for comparison of F64 to bool." );58 "psMetadataItemCompare: return false for comparison of F64 to bool." ); 59 59 } 60 60 //Return true for comparing F64 with Bool 61 61 { 62 62 ok( psMetadataItemCompare(item, compare), 63 " return false for comparison of bool to F64." );63 "psMetadataItemCompare: return false for comparison of bool to F64." ); 64 64 } 65 65 … … 73 73 { 74 74 ok( psMetadataItemCompare(compare, template), 75 " return true for comparison of S32 to F32." )75 "psMetadataItemCompare: return true for comparison of S32 to F32." ) 76 76 ; 77 77 } … … 79 79 { 80 80 ok( psMetadataItemCompare(template, compare), 81 " return true for comparison of F32 to S32." )81 "psMetadataItemCompare: return true for comparison of F32 to S32." ) 82 82 ; 83 83 } … … 92 92 { 93 93 ok( psMetadataItemCompare(compare, template), 94 " return true for comparison of S16 to U32." )94 "psMetadataItemCompare: return true for comparison of S16 to U32." ) 95 95 ; 96 96 } … … 98 98 { 99 99 ok( psMetadataItemCompare(template, compare), 100 " return true for comparison of U32 to S16." )100 "psMetadataItemCompare: return true for comparison of U32 to S16." ) 101 101 ; 102 102 } … … 111 111 { 112 112 ok( psMetadataItemCompare(compare, template), 113 " return true for comparison of U8 to U16." )113 "psMetadataItemCompare: return true for comparison of U8 to U16." ) 114 114 ; 115 115 } … … 117 117 { 118 118 ok( psMetadataItemCompare(template, compare), 119 " return true for comparison of U16 to U8." )119 "psMetadataItemCompare: return true for comparison of U16 to U8." ) 120 120 ; 121 121 } … … 126 126 { 127 127 ok( psMetadataItemCompare(compare, template), 128 " return true for comparison of U8 to S8." )128 "psMetadataItemCompare: return true for comparison of U8 to S8." ) 129 129 ; 130 130 } … … 132 132 { 133 133 ok( psMetadataItemCompare(template, compare), 134 " return true for comparison of S8 to U8." )134 "psMetadataItemCompare: return true for comparison of S8 to U8." ) 135 135 ; 136 136 } … … 141 141 { 142 142 ok( !psMetadataItemCompare(compare, template), 143 "return false for comparison of U8 to S64*. *not yet implemented" ) 143 "psMetadataItemCompare: return false for comparison of U8 to S64*. " 144 "*not yet implemented" ) 144 145 ; 145 146 } … … 147 148 { 148 149 ok( !psMetadataItemCompare(template, compare), 149 "return false for comparison of S64* to U8. *not yet implemented" ) 150 "psMetadataItemCompare: return false for comparison of S64* to U8. " 151 "*not yet implemented" ) 150 152 ; 151 153 } … … 160 162 { 161 163 ok( !psMetadataItemCompare(compare, template), 162 " return false for comparison of different psString's.")164 "psMetadataItemCompare: return false for comparison of different psString's.") 163 165 ; 164 166 } … … 171 173 { 172 174 ok( psMetadataItemCompare(compare, template), 173 " return true for comparison of identical psString's.")175 "psMetadataItemCompare: return true for comparison of identical psString's.") 174 176 ; 175 177 } … … 182 184 { 183 185 ok( !psMetadataItemCompare(compare, template), 184 "return false for comparison of psString with bool." ) 186 "psMetadataItemCompare: return false for comparison of psString with bool.") 187 ; 188 } 189 //Return false for comparing bool with string 190 psFree(template) 191 ; 192 template = psMetadataItemAlloc("Snickers", PS_DATA_BOOL, "No Comment", false) 193 ; 194 { 195 ok( !psMetadataItemCompare(template, compare), 196 "psMetadataItemCompare: return false for comparison of psString with bool.") 185 197 ; 186 198 } -
trunk/psLib/test/types/tst_psArguments.c
r7448 r8805 5 5 * @author David Robbins, MHPCC 6 6 * 7 * @version $Revision: 1. 3$ $Name: not supported by cvs2svn $8 * @date $Date: 2006-0 6-09 01:25:42$7 * @version $Revision: 1.4 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2006-09-13 02:20:15 $ 9 9 * 10 10 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 12 12 */ 13 13 14 #include "psTest.h" 15 #include "pslib_strict.h" 14 #include "pslib.h" 16 15 17 16 static psS32 testArgument(void); 18 17 /* 19 18 testDescription tests[] = { 20 19 {testArgument, 666, "Test psArgument fxns", 0, false}, 21 20 {NULL} 22 21 }; 23 22 */ 24 23 int main(int argc, char* argv[]) 25 24 { 26 25 psLogSetLevel( PS_LOG_INFO ); 27 if( !runTestSuite(stderr,"psArguments",tests,argc,argv)) { 28 return 1; 29 } 26 testArgument(); 27 // if( !runTestSuite(stderr,"psArguments",tests,argc,argv)) { 28 // return 1; 29 // } 30 30 return 0; 31 31 }
Note:
See TracChangeset
for help on using the changeset viewer.
