Changeset 8805 for trunk/psLib/src/types
- Timestamp:
- Sep 12, 2006, 4:20:15 PM (20 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/types/psArguments.c (modified) (21 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);
Note:
See TracChangeset
for help on using the changeset viewer.
