]> Creatis software - gdcm.git/blob - src/gdcmArgMgr.h
With GDCM_EXPORT, VC shoul be happier
[gdcm.git] / src / gdcmArgMgr.h
1 /*=========================================================================
2   
3   Program:   gdcm
4   Module:    $RCSfile: gdcmArgMgr.h,v $
5   Language:  C++
6   Date:      $Date: 2005/06/07 07:46:50 $
7   Version:   $Revision: 1.2 $
8   
9   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
10   l'Image). All rights reserved. See Doc/License.txt or
11   http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details.
12   
13      This software is distributed WITHOUT ANY WARRANTY; without even
14      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15      PURPOSE.  See the above copyright notices for more information.
16   
17 =========================================================================*/
18
19 #ifndef  ___ARG_MGR__
20 #define  ___ARG_MGR__
21
22 #include "gdcmCommon.h"
23 #include <stdlib.h> // For atof
24
25 namespace gdcm
26 {
27
28 #define ID_RFILE_TEXT   "rt"
29 #define ARGMAXCOUNT 100   // Maximum number of arguments
30 #define ARG_LONG_MAX          1000
31
32 // default file name
33 #define ARG_DEFAULT_PARAMOUT    "fileout.par"
34 #define ARG_DEFAULT_LOGFILE     "gdcm.log"
35
36 #define  ARG_LABEL_LOGFILE       "LOG"
37 #define  ARG_LABEL_PARAMOUT      "paramout"
38
39 #define START_USAGE(usage)   char *usage[] = {
40 #define FINISH_USAGE         0};
41
42 //-----------------------------------------------------------------------------
43 /**
44  * \brief   class designed for command line arguments management
45  *          (to make programmer's live easier) 
46  *          NOT Dicom dependant (could be used for any kind 
47  *                              of 'command line program')        
48  */
49  
50 class GDCM_EXPORT ArgMgr
51 {
52 public:
53    ArgMgr(int argc, char **argv);
54    ~ArgMgr();
55
56    int    ArgMgrDefined           (char *);      /* Checks if Param is defined*/
57    char  *ArgMgrValue             (char *);      /* Returns Param value       */
58    char  *ArgMgrUnused            (void);        /* Returns a never used arg. */
59    int    ArgMgrSave              (char *);      /* Save of parameters out    */
60    int    ArgMgrUsage             (char **);     /* Display program usage     */
61    int    ArgMgrPrintUnusedLabels (void);        /* Prints unused labels      */
62
63    int    ArgMgrGetInt   (char*, int);  /* Gets an int   (with default value)  */
64    float  ArgMgrGetFloat (char*, float);/* Gets a float  (with default value)  */
65    char  *ArgMgrGetString(char*, char*);/* Gets a string (with default value)  */
66    int    ArgMgrGetLabel (char *, char *, int);
67   
68    int   ArgMgrWantInt   (char*, char**);  /* Demands an int                   */
69    float ArgMgrWantFloat (char*, char**);  /* Demands a float                  */
70    char *ArgMgrWantString(char*, char**);  /* Demands a string                 */
71    int   ArgMgrWantLabel (char*, char *, char **);
72
73    int   *ArgMgrGetListOfInt   (char *, int *);   /* Gets a list of int        */
74    float *ArgMgrGetListOfFloat (char *, int *);   /* Gets a list of float      */
75    char **ArgMgrGetListOfString(char *, int *);   /* Gets a list of string     */
76
77    int   * ArgMgrGetIntEnum     (char *, int *); /* Gets a list of int intervals  */
78    float * ArgMgrGetFloatEnum   (char *, int *); /* Gets a list of float intervals*/
79
80 private :
81
82    int    FiltreLong      (char *);
83    char  *LoadedParam     (char *, FILE *);
84    int    ArgLoadFromFile (char *);
85    void   ArgStdArgs      (void);
86
87    // These ones are 'general purpose methods'
88    char  *maj             (char *);
89    char  *Majuscule       (char *);
90    int IdStrCountChar     (char *chaine, int caract);
91    int *IdStrIntEnum      (char* value, int *number);
92    float *IdStrFloatEnum  (char* value, int *number);
93
94 // --------------- Attributes ------------------------------
95
96 private :
97
98    char *ArgParamOut;          /* Output File Name for param */
99
100    char *ArgUsed;              /* Used Arguments             */
101    char *ArgLab[ARGMAXCOUNT];  /* Arguments Labels           */
102    char *ArgStr[ARGMAXCOUNT];  /* Arguments 'strings'        */
103    int   ArgCount;             /* Number of arguments passed */
104    char *Appel;                
105 };
106 } // end namespace gdcm
107
108 #endif