]> Creatis software - gdcm.git/blobdiff - src/gdcmArgMgr.cxx
Fix mistypings
[gdcm.git] / src / gdcmArgMgr.cxx
index 6564bce4e1639cbef20976329de5250f21baf225..03d8841622c91e47cd6c47c6810156ad06960b57 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmArgMgr.cxx,v $
   Language:  C++
-  Date:      $Date: 2005/07/30 18:18:44 $
-  Version:   $Revision: 1.12 $
+  Date:      $Date: 2008/05/14 10:45:11 $
+  Version:   $Revision: 1.28 $
   
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
 #include <ctype.h>
 #include <string.h>  // For strlen
 
+// No strcasecmp in WIN32 world, but stricmp
+// http://www.opengroup.org/onlinepubs/007908799/xsh/strcasecmp.html
+#ifdef _WIN32
+#define strcasecmp stricmp
+#endif
+
 #include <string.h>  // For strtok and strlen
 #include <stdlib.h>  // For strtol and strtod
 
 #include "gdcmArgMgr.h"
 
-namespace gdcm 
+namespace GDCM_NAME_SPACE 
 {
 //-------------------------------------------------------------------------
 // Constructor / Destructor
@@ -37,12 +43,13 @@ namespace gdcm
  * @param argv  pointers array on the arguments passed to main()  
  */
  ArgMgr::ArgMgr(int argc, char **argv)
+ : ArgParamOut (NULL), ArgUsed(NULL), ArgLab(NULL), ArgStr(NULL), ArgCount(0), Appel(NULL)
  {
    int i;
-   int nblettre;
-   ArgUsed = NULL;
-   Appel   = NULL;
-  
+   int nblettre;   
+   ArgLab = new char *[ARGMAXCOUNT];
+   ArgStr = new char *[ARGMAXCOUNT];
+   
    /* Read the parameters of the command line *************************/
    for ( ArgCount=0, nblettre=1 , i=0; i<argc; i++) 
    {
@@ -88,13 +95,19 @@ namespace gdcm
       char * egaloufin = ArgLab[i] ;
       while ( (*egaloufin != '\0') && (*egaloufin != '=') ) 
          egaloufin ++ ;
-      if ( *egaloufin ) *(egaloufin++) = '\0';
+      if ( *egaloufin )
+          *(egaloufin++) = '\0';
       ArgStr[i]= egaloufin;
    }
 
    /* Set labels to upper-case (labels are not case sensitive ) *********/
+   //char *secu;
    for ( i=0; i<ArgCount; i++)
+   {
+      //secu = ArgLab[i];
       ArgLab[i] = Majuscule ( ArgLab[i] ) ;
+      //free (secu); //we still need it in the caller pgm.
+   }
 
   /* Standard arguments are managed by ArgStdArgs **********************/
    ArgStdArgs(); 
@@ -108,38 +121,44 @@ ArgMgr::~ArgMgr()
    for(int i=0;i<ArgCount;i++)
       if ( ArgLab[i] )
          free(ArgLab[i]);
+   delete ArgLab;   
+   delete ArgStr;  
    if ( ArgUsed )
       free(ArgUsed);
    if ( Appel )
       free(Appel);
 }
  
 /**
  * \brief  checks if a parameter exists in the command line
  * @param param  label name
- * @return   false if label is not found
- *           true  if label is not found
+ * @return   0 if label is not found
+ *           else, returns the number of the spot it was found last time.
  */
-bool ArgMgr::ArgMgrDefined( const char *param )
+int ArgMgr::ArgMgrDefined( const char *param )
 {
-  int i, trouve ;
+  int i;
+  bool trouve;
   char *temp;
   temp = Majuscule ( param ) ;
-  for ( trouve = false, i = ArgCount-1; i>0; i-- )
+  for ( i = ArgCount-1; i>0; i-- )
   { 
-    trouve = ! strcmp( ArgLab[i], temp ) ;
+    trouve = ( strcmp( ArgLab[i], temp )==0 ) ;
     if ( trouve )
     {
+      free (temp);
       ArgUsed[i] = true ;           
       for ( int j=1; j<i; j++)
       {                     
          if ( (!ArgUsed[j])&&(!strcmp(ArgLab[i],ArgLab[j])) )
-            ArgUsed[j] = true ;
+            ArgUsed[j] = i ;
       }
-      return true ;
-    }
+      return i ;
+    }   
   }
-  return false ;
+  free (temp);
+  return 0 ;
 }
 
 /**
@@ -161,7 +180,7 @@ char *ArgMgr::ArgMgrValue ( const char *param )
  * \brief  Search for the first not yet used label
  * @return Pointer to the char array holding the first non used label
  */
-char *ArgMgr::ArgMgrUnused ( )
+const char *ArgMgr::ArgMgrUnused ( )
 {
    int i ;
    for ( i=ArgCount-1; i>0; i-- )
@@ -181,7 +200,7 @@ char *ArgMgr::ArgMgrUnused ( )
  */
 int ArgMgr::ArgMgrPrintUnusedLabels ()
 {
-   char *label;
+   const char *label;
    int i=0;
    while ( (label=ArgMgrUnused())!=0 )
    {
@@ -216,7 +235,7 @@ int ArgMgr::ArgMgrUsage(const char **usage )
  * @param param  char. array that defines the parameter
  * @return   Entier correspondant au rang dans la liste de labels
  */
-int ArgMgr::ArgMgrSave ( char *param )
+int ArgMgr::ArgMgrSave ( const char *param )
 {
    static int   deja = 0;
    FILE         *fd;
@@ -276,7 +295,7 @@ float ArgMgr::ArgMgrGetFloat(const char *param, float defaultVal)
  * @param defaultVal default value
  * @return parameter value
  */
-char *ArgMgr::ArgMgrGetString(const char *param, char *defaultVal)
+const char *ArgMgr::ArgMgrGetString(const char *param, const char *defaultVal)
 {
    return    ( (ArgMgrDefined(param)) 
               ? (ArgMgrValue(param))
@@ -294,22 +313,23 @@ char *ArgMgr::ArgMgrGetString(const char *param, char *defaultVal)
  * @param val  number of default value
  * @return   int : range of value amongst the values list
  */
-int ArgMgr::ArgMgrGetLabel (const char *param, char *liste, int val )
+int ArgMgr::ArgMgrGetLabel (const char *param, const char *liste, int val )
 {
   char *lab;
-  char *vallab;
+  const char *vallab;
   int i = 1;
   char *tmp;
   tmp = (char *) malloc(strlen(liste)+1);
   strcpy(tmp,liste);
 
-  if ( (vallab = ArgMgrGetString(param,(char *)NULL)) != 0 ) 
+  if ( (vallab = ArgMgrGetString(param,(const char *)NULL)) != 0 ) 
   { 
      for ( lab = strtok (tmp,"\\"); 
            lab != 0; 
            lab = strtok(0L,"\\"), i++ )
      { 
-        if ( strcmp(maj(lab),maj(vallab))==0)
+        // strcmp ignoring case
+        if( strcasecmp(lab, vallab) == 0)
            return i;
      } 
      val=0;
@@ -325,18 +345,19 @@ int ArgMgr::ArgMgrGetLabel (const char *param, char *liste, int val )
  * @param liste  character Chain describing the various values.
  *               Labels are separated by  '\\'.
  *               No case sensitive.
+ *               WARNING this will be changed (not const)
  * @param usage Usage program (displayed if label not found)
  * @return   int : range of value amongst the values list
  */
 int ArgMgr::ArgMgrWantLabel (const char *param, char *liste, const char **usage )
 {
    char *lab;
-   char *vallab;
+   const char *vallab;
    int i = 1;
    if ( (vallab = ArgMgrGetString(param,0)) != 0 ) 
    {
       for ( lab = strtok (liste,"\\"); lab != 0; lab = strtok(0L,"\\"), i++ )
-        if ( strcmp(maj(lab),maj(vallab))==0) 
+        if ( strcasecmp(lab,vallab)==0) 
            return i;
       return 0;
    }
@@ -404,7 +425,10 @@ char **ArgMgr::ArgMgrGetListOfString ( const char *label, int *number )
   char **elem;
   char  *chainecur; 
   if (!value)
+  {
+     *number = 0;
      return 0;
+  }
   *number = IdStrCountChar(value,',')+1; /* nb Elements = nb Commas +1 */
   taille = *number;
   liste = (char **) malloc (sizeof(char*) * taille + strlen(value)+1);
@@ -434,14 +458,17 @@ int *ArgMgr::ArgMgrGetListOfInt ( const char *label, int *number )
   int *elem;
   int taille;
   if (!value)
+  {
+     *number = 0;
      return 0;
-  *number = IdStrCountChar(value,',')+1; /* nb Elements = nb Commas +1 */
+  }          
+  *number = IdStrCountChar(value,',')+1; /* nb Elements = nb Commas +1 */ 
   taille= *number;
   liste = (int *) calloc (1,sizeof(int)*taille );
   if ( !liste )
      return 0;
   elem = liste;
-  *number = 1;
+  //*number = 1;
 
   while ( taille>0 ) 
   {
@@ -476,9 +503,12 @@ float *ArgMgr::ArgMgrGetListOfFloat ( const 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 ) 
   {
@@ -734,7 +764,7 @@ char *ArgMgr::Majuscule (const char *chaine )
   char *ptr, *ptr2, *ptr3;
   ptr2 = (char *)malloc(strlen(chaine)*sizeof(char)+1);
   ptr3=ptr2;
 for ( ptr = (char *)chaine ; *ptr!='\0' ; ptr ++ ) 
for ( ptr = const_cast<char *>(chaine) ; *ptr!='\0' ; ptr ++ ) 
    {  
        *ptr3 = toupper ( * ptr ); ptr3++; 
    }
@@ -751,7 +781,7 @@ char *ArgMgr::Majuscule (const char *chaine )
 * Valeur retournee . : false if OK.                                       *
 *                      true if KO.                                        *
 **************************************************************************/
-int ArgMgr::FiltreLong ( char *arg  )
+int ArgMgr::FiltreLong ( const char *arg  )
 {
   int  n = 0 ;
   while ( (n++<ARG_LONG_MAX) && (*(arg++) != '\0') ) ;
@@ -770,12 +800,12 @@ int ArgMgr::FiltreLong ( char *arg  )
 const char *ArgMgr::LoadedParam ( const char *param, FILE *fd )
 {
   int    carlu;
-  char  *car = (char *)param;
+  char  *car = const_cast<char *>(param);
   int    quote = false;
   int    nbcar = 0;
 
   /* remove spaces at the beginning****/
-  while ( isspace(carlu=fgetc (fd)) );
+  while ( isspace(carlu=fgetc (fd)) ) {}
   if (carlu==EOF)
      return 0;
   /* Search for a " */
@@ -814,16 +844,16 @@ const char *ArgMgr::LoadedParam ( const char *param, FILE *fd )
  |              Role     : parameter File name
  |
  +------------------------------------------------------------------------*/
-int ArgMgr::ArgLoadFromFile ( char *filename )
+int ArgMgr::ArgLoadFromFile ( const char *filename )
 {
-  int   nbl = 0;
+  size_t   nbl = 0;
   char  param[ARG_LONG_MAX+1];
   FILE  *fch;
 
   fch = fopen ( filename, ID_RFILE_TEXT );
   while ( LoadedParam (param, fch ) )
   {
-    int n = strlen(param);
+    size_t n = strlen(param);
     if ( param[0]=='@' )
     {
       nbl  += ArgLoadFromFile ( &param[1] );
@@ -838,7 +868,7 @@ int ArgMgr::ArgLoadFromFile ( char *filename )
     }
   }
   fclose ( fch );
-  return nbl;
+  return static_cast< int >( nbl );
 }
 
 /*------------------------------------------------------------------------
@@ -851,12 +881,12 @@ void ArgMgr::ArgStdArgs()
   char *logfile;
   FILE *fd;
 
-  if ( (ArgParamOut=ArgMgrValue((char*)ARG_LABEL_PARAMOUT))==0 )
+  if ( (ArgParamOut=ArgMgrValue(const_cast<char*>(ARG_LABEL_PARAMOUT)))==0 )
     ArgParamOut = ARG_DEFAULT_PARAMOUT;
-  if ( (logfile = ArgMgrValue((char*)ARG_LABEL_LOGFILE))!=0) 
+  if ( (logfile = ArgMgrValue(const_cast<char*>(ARG_LABEL_LOGFILE)))!=0) 
   {
     if ( *logfile == '\0' )
-       logfile = (char *)ARG_DEFAULT_LOGFILE;
+       logfile = const_cast<char *>(ARG_DEFAULT_LOGFILE);
     fd = fopen ( logfile, "a+" );
     if ( fd ) 
     {