IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 8805 for trunk/psLib/src/types


Ignore:
Timestamp:
Sep 12, 2006, 4:20:15 PM (20 years ago)
Author:
drobbin
Message:

Added testing for Arguments. Edited src file minimally. coverage at 100%. Edited ItemCompare to complete 100% coverage.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/types/psArguments.c

    r8627 r8805  
    77 *  @author David Robbins, MHPCC
    88 *
    9  *  @version $Revision: 1.11 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2006-08-26 04:34:28 $
     9 *  @version $Revision: 1.12 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2006-09-13 02:20:15 $
    1111 *
    1212 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    2424#include "psLogMsg.h"
    2525#include "psTrace.h"
     26#include "psAssert.h"
    2627
    2728#define NUM_SPACES 4   // Number of spaces between
    2829
    2930// Set verbosity level
    30 int psArgumentVerbosity(int *argc, char **argv)
     31int psArgumentVerbosity(int *argc,
     32                        char **argv)
    3133{
    3234    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);
    3338    int argnum = 0;   // Argument number
    3439
     
    6368        if ( (*argc < argnum + 3) ) {
    6469            psError(PS_ERR_IO, true, "-trace switch specified without facility and level.");
     70            return logLevel;
    6571        }
    6672        psArgumentRemove(argnum, argc, argv);
     
    7177    if ((argnum = psArgumentGet(*argc, argv, "-trace-levels"))) {
    7278        psTracePrintLevels();
    73         exit(2);
     79        //        exit(2);
     80        return logLevel;
    7481    }
    7582
     
    7885
    7986// Find the location of the specified argument
    80 int psArgumentGet(int argc, char **argv, const char *arg)
    81 {
     87int 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;
    8295    for (int i = 1; i < argc; i++) {
    8396        if (!strcmp(argv[i], arg))
     
    89102
    90103// Remove the specified argument (by location)
    91 bool psArgumentRemove(int argnum, int *argc, char **argv)
    92 {
     104bool 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);
    93110    if (argnum > 0) {
    94111        (*argc)--;
     
    148165                     char **argv)
    149166{
     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;
    150172    // We need to do a bit of mucking around in order to preserve the arguments metadata until the last
    151173    // minute --- if there is a bad argument, we need to return the old "arguments", since they contain
     
    174196                    }
    175197
    176                     psMetadataIterator *paramsIter = psMetadataIteratorAlloc(params, PS_LIST_HEAD, NULL);// Iter
     198                    psMetadataIterator *paramsIter = psMetadataIteratorAlloc(params,
     199                                                     PS_LIST_HEAD, NULL);// Iter
    177200                    psMetadataItem *param = NULL; // Parameter from iteration
    178201                    while ((param = psMetadataGetAndIncrement(paramsIter))) {
     
    252275        LENGTH_CASE(U16);
    253276        LENGTH_CASE(U32);
     277        LENGTH_CASE(U64);
    254278        LENGTH_CASE(S8);
    255279        LENGTH_CASE(S16);
    256280        LENGTH_CASE(S32);
     281        LENGTH_CASE(S64);
    257282    case PS_DATA_F32:
    258283        return arg->data.F32 >= 0 ? 12 : 13; // -d.dddddde?dd
     
    264289        return arg->data.V ? strlen(arg->data.V) : 0;
    265290    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);
    267295    }
    268296
     
    279307static void printValueComment(psMetadataItem *item, // Argument item for which to print
    280308                              const char *comment, // Comment to print
    281                               unsigned int numSpaces // Number of spaces
    282                              )
     309                              unsigned int numSpaces) // Number of spaces
     310
    283311{
    284312    int valueLength = 0;                // Length of the value portion
     
    287315        // Print the value
    288316        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");
    292321            PRINT_CASE(S8,"%d");
    293322            PRINT_CASE(S16,"%d");
    294323            PRINT_CASE(S32,"%d");
     324            PRINT_CASE(S64,"%ld");
    295325            PRINT_CASE(F32,"%.6e");
    296326            PRINT_CASE(F64,"%.6e");
     
    308338            break;
    309339        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);
    311344        }
    312345        valueLength = argLength(item);
     
    331364static void maxLength(int *maxName,     // Maximum length of the name
    332365                      int *maxValue,    // Maximum length of the value
    333                       psMetadata *md    // Metadata for which to check the length
    334                      )
     366                      psMetadata *md)    // Metadata for which to check the length
     367
    335368{
    336369    psMetadataIterator *iter = psMetadataIteratorAlloc(md, PS_LIST_HEAD, NULL); // Iterator
    337370    psMetadataItem *item = NULL;        // Item from iteration
    338     while ((item = psMetadataGetAndIncrement(iter))) {
     371    while ((item = psMetadataGetAndIncrement(iter)))
     372    {
    339373        if (item->type == PS_DATA_METADATA) {
    340374            maxLength(maxName, maxValue, item->data.V);
     
    357391void psArgumentHelp(psMetadata *arguments)
    358392{
     393    if (arguments == NULL)
     394        return;
    359395    printf("Optional arguments, with default values:\n");
    360396    int maxName = 4;   // Maximum length of a name
     
    384420        psMetadataItem *multiCheck = psMetadataLookup(arguments, argItem->name); // Item to check for MULTI
    385421        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            }
    387451            continue;
    388452        }
     
    416480// we have log levels 1 (Error), 2 (Warning), 3 (Info), 4 (Details), 5 (Minutiae)
    417481// 2 = default, -v = 3, -vv = 4, -vvv = 5
    418 psS32 psLogArguments (int *argc, char **argv)
    419 {
    420 
     482psS32 psLogArguments (int *argc,
     483                      char **argv)
     484{
    421485    int N, level;
    422486
     
    424488    level = 2;
    425489
     490    psLogSetLevel (level);
     491    PS_ASSERT_PTR_NON_NULL(argv, 2);
     492    PS_ASSERT_PTR_NON_NULL(argc, 2);
    426493    // set in order, so that -vvv overrides -vv overrides -v
    427494    if ((N = psArgumentGet (*argc, argv, "-v"))) {
     
    440507    if ((N = psArgumentGet (*argc, argv, "-logfmt"))) {
    441508        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        }
    447516    }
    448517
     
    453522
    454523// set trace levels by facility
    455 psS32 psTraceArguments (int *argc, char **argv)
    456 {
    457 
     524psS32 psTraceArguments (int *argc,
     525                        char **argv)
     526{
    458527    int N;
     528    PS_ASSERT_PTR_NON_NULL(argv, 0);
     529    PS_ASSERT_PTR_NON_NULL(argc, 0);
    459530
    460531    // argument format is: -trace (facil) (level)
    461532    while ((N = psArgumentGet (*argc, argv, "-trace"))) {
    462533        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;
    464537        }
    465538        psArgumentRemove (N, argc, argv);
     
    470543    if ((N = psArgumentGet (*argc, argv, "-trace-levels"))) {
    471544        psTracePrintLevels ();
    472         exit (2);
     545        //        exit (2);
     546        return 0;
    473547    }
    474548    return (TRUE);
Note: See TracChangeset for help on using the changeset viewer.