X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmArgMgr.cxx;h=32e3765ef519e0d623c9b9ad911003b087e294fb;hb=fafcabd41c8bd44143874bb4f4ef267e9a718864;hp=77536db0e1d448298fe0df68379258cf9e148456;hpb=8c76d020058e21a1bf32f2320177bc6c8dab2309;p=gdcm.git diff --git a/src/gdcmArgMgr.cxx b/src/gdcmArgMgr.cxx index 77536db0..32e3765e 100644 --- a/src/gdcmArgMgr.cxx +++ b/src/gdcmArgMgr.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmArgMgr.cxx,v $ Language: C++ - Date: $Date: 2005/06/08 08:58:22 $ - Version: $Revision: 1.4 $ + Date: $Date: 2005/12/22 14:46:06 $ + Version: $Revision: 1.16 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -36,7 +36,7 @@ namespace gdcm * @param argc arguments count, as passed to main() * @param argv pointers array on the arguments passed to main() */ - ArgMgr::ArgMgr(int argc, char *argv[]) + ArgMgr::ArgMgr(int argc, char **argv) { int i; int nblettre; @@ -70,7 +70,7 @@ namespace gdcm } } - /* Fills an array with the alreadu used parameters ****/ + /* Fills an array with the already used parameters ****/ ArgUsed = (char *)calloc (1, ArgCount ); /* Builds the full string with all the parameters **************/ @@ -106,50 +106,50 @@ namespace gdcm ArgMgr::~ArgMgr() { for(int i=0;i0; i-- ) + temp = Majuscule ( param ) ; + for ( i = ArgCount-1; i>0; i-- ) { - trouve = ! strcmp( ArgLab[i], temp ) ; + trouve = ( strcmp( ArgLab[i], temp )==0 ) ; if ( trouve ) { ArgUsed[i] = true ; for ( int j=1; j0 ) { @@ -459,13 +466,12 @@ return liste; } /** - * \brief decodage des elements d'un argument 'liste de FLOAT' de lgr qcq + * \brief decodes and returns an array of 'FLOAT' * @param label label name - * @param number taille de la liste trouvee - * @return Pointer vers le tableau de lgr 'taille' - * NULL if error + * @param number number of found FLOATs + * @return Pointer to the FLOAT array; NULL if error */ -float *ArgMgr::ArgMgrGetListOfFloat ( char *label, int *number ) +float *ArgMgr::ArgMgrGetListOfFloat ( const char *label, int *number ) { char *value = ArgMgrValue(label); float *liste; @@ -477,9 +483,12 @@ float *ArgMgr::ArgMgrGetListOfFloat ( char *label, int *number ) taille= *number; liste = (float *) calloc (1,sizeof(float)*taille ); if ( !liste ) + { + *number = 0; return 0; + } elem = liste; - *number = 1; + //*number = 1; while ( taille>0 ) { @@ -496,6 +505,66 @@ float *ArgMgr::ArgMgrGetListOfFloat ( char *label, int *number ) return liste; } +/** + * \brief decodes and returns an array of 'INT pairs', passed in decimal + * @param param label name + * @param number nb of found pairs + * @return pointer to the array of 'INT pairs'; NULL if fail + */ +int *ArgMgr::ArgMgrGetIntEnum ( const char *param, int *number ) +{ + char *value = ArgMgrValue(param); + int *liste; + if (!value) + { + *number = 0; + return 0; + } + liste = IdStrIntEnum(value, number); + return liste; +} + +/** + * \brief decodes and returns an array of 'INT16 pairs', passed in hexadecimal + * @param param label name + * @param number nb of found pairs + * @return pointer to the array of 'INT16 pairs'; NULL if fail + */ +uint16_t *ArgMgr::ArgMgrGetXInt16Enum ( const char *param, int *number ) +{ + char *value = ArgMgrValue(param); + uint16_t *liste; + if (!value) + { + *number = 0; + return 0; + } + liste = IdStrXInt16Enum(value, number); + return liste; +} +/** + * \brief decodes and returns an array of 'FLOAT pairs' + * @param param label name + * @param number nb of found pairs + * @return pointer to the array of 'FLOAT pairs'; NULL if fail + + */ +float *ArgMgr::ArgMgrGetFloatEnum ( const char *param, int *number ) +{ + char *value = ArgMgrValue(param); + float *liste; + if (!value) + { + *number = 0; + return 0; + } + liste = IdStrFloatEnum(value, number); + return liste; +} + +// ------------------------ Those are 'service functions' --------------------- +// ------------------------ internal use only --------------------- + /** * \brief Counts the nb of occurrences of a given charact within a 'string' * @param chaine Pointer to the 'string' @@ -513,11 +582,10 @@ int ArgMgr::IdStrCountChar (char *chaine, int caract) } /** - * \brief renvoie 1 tableau contenant un ensemble de paires d'entiers - * @param value pointer vers la zone allouee contenant les - * intervalles (deb1,fin1, deb2,fin2, ...) - * @param number Pointer vers le nb de paires trouvees - * @return 1 tableau contenant un ensemble de paires d'entiers + * \brief returns an array of 'INT pairs' + * @param value char array decribing a set of 'INT pairs' (f1-l1, f2-l2, ...) + * @param number nb of found INT pairs + * @return pointer to the array of 'INT pairs' */ int *ArgMgr::IdStrIntEnum ( char* value, int *number) { @@ -525,7 +593,7 @@ int *ArgMgr::IdStrIntEnum ( char* value, int *number) int taille; int i; - *number = IdStrCountChar(value,',')+1; /* nb Elements = nb Virgules +1 */ + *number = IdStrCountChar(value,',')+1; /* nb Elements = nb Commas +1 */ taille= *number; liste = (int *) calloc (1,sizeof(int)*2*taille ); if ( !liste ) @@ -563,18 +631,66 @@ int *ArgMgr::IdStrIntEnum ( char* value, int *number) } /** - * \brief renvoie 1 tableau contenant un ensemble de 'paires' de FLOAT - * @param value pointer vers la zone allouee contenant les - * paires (deb1,fin1, deb2,fin2, ...) - * @param number Pointer vers le nb de paires trouvees - * @return tableau contenant un ensemble de 'paires' de FLOAT + * \brief returns an array of set of 'INT16 pairs', passed in Hexadecimal + * @param value char array decribing a set of 'INT16 pairs' (f1-l1, f2-l2, ...) + * coded in hexadecimal e.g. 0x0008,0x00ac + * @param number nb of found pairs + * @return array of set of 'INT16 pairs' + */ +uint16_t *ArgMgr::IdStrXInt16Enum ( char *value, int *number) +{ + uint16_t *liste; + int taille; + int i; + + *number = IdStrCountChar(value,',')+1; /* nb Elements = nb Commas +1 */ + taille= *number; + liste = (uint16_t *) calloc (1,sizeof(uint16_t)*2*taille ); + if ( !liste ) + { + return 0; + } + i=0; + while ( taille>0 ) + { + liste[i] = (uint16_t) strtol ( value, &value, 16 ); + if ( *value == '\0' ) + { + liste[i+1]=liste[i]; + return liste; + } + if ( *(value++) != '-' ) + { + liste[i+1]=liste[i]; + value--; + } + else + { + liste[i+1] = (uint16_t) strtol ( value, &value, 16 ); + } + if ( *value == '\0' ) + return liste; + if ( *(value++) != ',' ) + { + free (liste); + return 0; + } + taille --; i+=2; + } + return liste; +} +/** + * \brief returns an array of 'FLOAT pairs' + * @param value char array decribing a set of 'FLOAT pairs' (f1-l1, f2-l2, ...) + * @param number nb of found pairs + * @return pointer to the array of 'FLOAT pairs'; NULL if fail */ float *ArgMgr::IdStrFloatEnum (char *value, int *number) { float *liste; int taille; int i; - *number = IdStrCountChar(value,',')+1; /* nb Elements = nb Virgules +1 */ + *number = IdStrCountChar(value,',')+1; /* nb Elements = nb Commas +1 */ taille= *number; liste = (float *) calloc (1,sizeof(float)*2*taille ); if ( !liste ) @@ -609,40 +725,6 @@ float *ArgMgr::IdStrFloatEnum (char *value, int *number) return liste; } -/** - * \brief decodage des elements d'un argument 'paires d'int' de lgr quelconque - * @param label label name - * @param number taille de l'ensemble de paires trouvee - * @return Pointer vers le tableau de taille '2*nbElem' - * Pointer NULL si erreur - */ -int *ArgMgr::ArgMgrGetIntEnum ( char *label, int *number ) -{ - char *value = ArgMgrValue(label); - int *liste; - if (!value) - return 0; - liste = IdStrIntEnum(value, number); - return liste; -} - -/** - * \brief decodage des elements d'un argument 'paires de float' de lgr quelconque - * @param label label name - * @param number taille de l'ensemble de paires trouvee - * @return Pointer vers le tableau de taille '2*nbElem' - * Pointer NULL si erreur - */ -float *ArgMgr::ArgMgrGetFloatEnum ( char *label, int *number ) -{ - char *value = ArgMgrValue(label); - float *liste; - if (!value) - return 0; - liste = IdStrFloatEnum(value, number); - return liste; -} - //----------------------------------------------------------------------------- // Protected @@ -657,12 +739,12 @@ float *ArgMgr::ArgMgrGetFloatEnum ( char *label, int *number ) * Valeur retournee . : Pointer to the new Upper case char array. * * * **************************************************************************/ -char *ArgMgr::Majuscule (char *chaine ) +char *ArgMgr::Majuscule (const char *chaine ) { char *ptr, *ptr2, *ptr3; ptr2 = (char *)malloc(strlen(chaine)*sizeof(char)+1); ptr3=ptr2; - for ( ptr = chaine ; *ptr!='\0' ; ptr ++ ) + for ( ptr = (char *)chaine ; *ptr!='\0' ; ptr ++ ) { *ptr3 = toupper ( * ptr ); ptr3++; } @@ -695,10 +777,10 @@ int ArgMgr::FiltreLong ( char *arg ) | fd : FILE * | Role : File description (assumed to be open) +------------------------------------------------------------------------*/ -char *ArgMgr::LoadedParam ( char *param, FILE *fd ) +const char *ArgMgr::LoadedParam ( const char *param, FILE *fd ) { int carlu; - char * car = param; + char *car = (char *)param; int quote = false; int nbcar = 0; @@ -779,9 +861,9 @@ void ArgMgr::ArgStdArgs() char *logfile; FILE *fd; - if ( (ArgParamOut=ArgMgrValue(ARG_LABEL_PARAMOUT))==0 ) + if ( (ArgParamOut=ArgMgrValue((char*)ARG_LABEL_PARAMOUT))==0 ) ArgParamOut = ARG_DEFAULT_PARAMOUT; - if ( (logfile = ArgMgrValue(ARG_LABEL_LOGFILE))!=0) + if ( (logfile = ArgMgrValue((char*)ARG_LABEL_LOGFILE))!=0) { if ( *logfile == '\0' ) logfile = (char *)ARG_DEFAULT_LOGFILE;