00001 /************************************************************************* 00002 * $Id: idarg.h,v 1.1 2005/09/09 08:22:25 bellet Exp $ 00003 ************************************************************************** 00004 This software is governed by the CeCILL license under French law and 00005 abiding by the rules of distribution of free software. You can use, 00006 modify and/ or redistribute the software under the terms of the CeCILL 00007 license as circulated by CEA, CNRS and INRIA at the following URL 00008 "http://www.cecill.info". 00009 00010 As a counterpart to the access to the source code and rights to copy, 00011 modify and redistribute granted by the license, users are provided only 00012 with a limited warranty and the software's author, the holder of the 00013 economic rights, and the successive licensors have only limited 00014 liability. 00015 00016 In this respect, the user's attention is drawn to the risks associated 00017 with loading, using, modifying and/or developing or reproducing the 00018 software by the user in light of its specific status of free software, 00019 that may mean that it is complicated to manipulate, and that also 00020 therefore means that it is reserved for developers and experienced 00021 professionals having in-depth computer knowledge. Users are therefore 00022 encouraged to load and test the software's suitability as regards their 00023 requirements in conditions enabling the security of their systems and/or 00024 data to be ensured and, more generally, to use and operate it in the 00025 same conditions as regards security. 00026 00027 The fact that you are presently reading this means that you have had 00028 knowledge of the CeCILL license and that you accept its terms. 00029 00030 Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de 00031 l'Image). All rights reserved. See License.txt for details. 00032 00033 Version 1.0 05/09/2005 00034 *************************************************************************/ 00035 00036 /************************************************************************* 00037 * 00038 * Description : Gestion simplifiee des arguments passes sur la ligne 00039 * de commande. 00040 * idarg.h DOIT OBLIGATOIREMENT figurer UNE FOIS ET UNE SEULE dans TOUT 00041 * filtre utilisant la Bibliotheque LibIDO (FIXME IDODUDE : c'est toujours 00042 * d'actualite ce commentaire ?) 00043 * 00044 **************************************************************************/ 00045 00046 #ifndef ___ARG_LIB__ 00047 #define ___ARG_LIB__ 00048 #include <stdlib.h> // For atof 00049 00050 #define ARGMAXCOUNT 100 /* Nombre maximum d'arguments */ 00051 00052 00053 /* autorises ******************/ 00054 /* Nom de fichier par defaut **/ 00055 #define ARG_DEFAULT_PARAMOUT "fileout.par" 00056 #define ARG_DEFAULT_LOGFILE "libido.log" 00057 00058 #ifndef FALSE 00059 #define FALSE (1==0) 00060 #define TRUE (1==1) 00061 #endif 00062 00063 #ifndef SWIG 00064 #define START_USAGE(usage) static char * usage[] = { 00065 #define FINISH_USAGE 0}; 00066 #endif 00067 00068 char * IdArgInit (int, char **); /* Routine d'initialisation */ 00069 int IdArgDefined (char *); /* Teste si Param est defini */ 00070 char * IdArgValue (char *); /* Retourne la valeur de Param */ 00071 char * IdArgUnused (void); /* Retourne un arg. non utilise */ 00072 int IdArgSave (char *); /* Sauvegarde de parametres out */ 00073 int IdArgUsage (char **); /* Affichage usage */ 00074 int IdArgPrintUnusedLabels (void); /* Imprime la liste des labels 00075 non utilises */ 00076 float *IdArgGetListOfFloat (char *,int); /* Lecture d'une liste de float */ 00077 int *IdArgGetListOfInt (char *,int); /* Lecture d'une liste de int */ 00078 char **IdArgGetListOfString (char *,int); /* Lecture d'une liste de chaine*/ 00079 float *IdArgGetListOfFloatWyW (char *,int *); 00080 int *IdArgGetListOfInt_N ( char *, int, int * OUTPUT); 00081 /* Lecture d'une liste de int 00082 avec le nb */ 00083 float *IdArgGetListOfFloat_N (char *,int, int * OUTPUT); 00084 /* Lecture d'une liste de float avec le nb */ 00085 char **IdArgGetListOfStringWyW(char *, int * OUTPUT); 00086 /* Lecture d'une liste de chaine de lgr qcq */ 00087 int *IdArgGetListOfIntWyW (char *, int * OUTPUT); 00088 /* Lecture d'une liste de int de lgr qcq */ 00089 00090 int * IdArgGetIntEnum (char *, int * OUTPUT); 00091 /* Lecture d'une liste de d'intervalles int */ 00092 float * IdArgGetFloatEnum (char *, int * OUTPUT); 00093 /* Lecture d'une liste de d'intervalles float */ 00094 00095 int IdArgGetType (char *,int); /* Saisie d'argument de typeData */ 00096 int IdArgWantType (char *,char**);/* Saisie d'argument de typeData */ 00097 int IdArgGetTypeObj (char *,int); /* Saisie d'argument de typeObjet */ 00098 int IdArgWantTypeObj (char *,char**);/* Saisie d'argument de typeObjet */ 00099 00100 int IdArgGetLabel (char *, char *, int); 00101 int IdArgWantLabel (char *, char *, char **); 00102 00103 /* C.M. 7-JUI-1992 10:24:02 */ 00104 /* FUNCTION DESCRIPTION ************************************************** 00105 * 00106 * IdArgGetInt (macro) 00107 * 00108 * RESUME: Saisie de valeurs passees en argument a un filtre, avec val. par defaut. 00109 * 00110 * DESCRIPTION: Saisie de valeurs passees en argument a un filtre. 00111 * Si le parametre n'est pas present, retourne la valeur 00112 * par defaut. 00113 * Voir aussi : IdArgWant... 00114 * 00115 * SYNTAXE: int i = IdArgGetInt (char * label, int default); 00116 * 00117 * RETOUR: type : int 00118 * role : 00119 * 00120 * PARAMETRES: 00121 * nom : label 00122 * type : char * 00123 * role : Label du parametre recherche. 00124 * 00125 * nom : defaut 00126 * type : variable (cf. Role) 00127 * role : Valeur par defaut retournee si le label n'est 00128 * pas trouve. 00129 * 00130 * 00131 * EXEMPLE: int dimx = IdArgGetInt ( "DIMX", 256 ); 00132 * 00133 ******************************************************** END DESCRIPTION */ 00134 00135 /* FUNCTION DESCRIPTION ************************************************** 00136 * 00137 * IdArgGetFloat (macro) 00138 * 00139 * RESUME: Saisie de valeurs passees en argument a un filtre, avec val. par defaut. 00140 * 00141 * DESCRIPTION: Saisie de valeurs passees en argument a un filtre. 00142 * Si le parametre n'est pas present, retourne la valeur 00143 * par defaut. 00144 * Voir Aussi IdArgWant ... 00145 * 00146 * SYNTAXE: float f = IdArgGetFloat( char * label, float default); 00147 * 00148 * RETOUR: type : float 00149 * role : 00150 * 00151 * PARAMETRES: nom : label 00152 * type : char * 00153 * role : Label du parametre recherche. 00154 * 00155 * nom : defaut 00156 * type : variable (cf. Role) 00157 * role : Valeur par defaut retournee si le label n'est 00158 * pas trouve. 00159 * 00160 * 00161 * EXEMPLE: int dimx = IdArgGetInt ( "DIMX", 256 ); 00162 * 00163 ******************************************************** END DESCRIPTION */ 00164 00165 /* FUNCTION DESCRIPTION ************************************************** 00166 * 00167 * IdArgGetString (macro) 00168 * 00169 * RESUME: Saisie de valeurs passees en argument a un filtre, avec val. par defaut. 00170 * 00171 * DESCRIPTION: Saisie de valeurs passees en argument a un filtre. 00172 * Si le parametre n'est pas present, retourne la valeur 00173 * par defaut. 00174 * Voir Aussi IdArgWant ... 00175 * 00176 * SYNTAXE: char *s = IdArgGetString (char * label, char * default); 00177 * 00178 * RETOUR: type : char * 00179 * role : 00180 * 00181 * PARAMETRES: 00182 * nom : label 00183 * type : char * 00184 * role : Label du parametre recherche. 00185 * 00186 * nom : defaut 00187 * type : variable (cf. Role) 00188 * role : Valeur par defaut retournee si le label n'est 00189 * pas trouve. 00190 * 00191 * EXEMPLE: int dimx = IdArgGetInt ( "DIMX", 256 ); 00192 * 00193 ******************************************************** END DESCRIPTION */ 00194 00195 00196 #define IdArgGetInt(label,default) ( (IdArgDefined(label)) \ 00197 ? (atoi(IdArgValue(label))) \ 00198 : (default) ) 00199 #define IdArgGetFloat(label,default) ( (IdArgDefined(label)) \ 00200 ? (atof(IdArgValue(label))) \ 00201 : (default) ) 00202 #define IdArgGetString(label,default) ((IdArgDefined(label)) \ 00203 ? (IdArgValue(label)) \ 00204 : (default) ) 00205 00206 #ifdef SWIG 00207 00208 int IdArgGetInt(char*, int); 00209 float IdArgGetFloat(char*, float); 00210 char* IdArgGetString(char*, char*); 00211 00212 #endif 00213 00214 /* FUNCTION DESCRIPTION ************************************************** 00215 * 00216 * IdArgWantInt (macro) 00217 * 00218 * RESUME: Saisie de valeurs passees en argument a un filtre. 00219 * 00220 * DESCRIPTION: Saisie de valeurs passees en argument a un filtre. 00221 * Si le label du parametre n'est pas present, appelle la fonction 00222 * IdArgUsage. 00223 * 00224 * SYNTAXE: int i = IdArgWantInt(char * label, char *usage[]); 00225 * 00226 * RETOUR: type : int 00227 * role : 00228 * 00229 * PARAMETRES: 00230 * nom : label 00231 * type : char * 00232 * role : Label du parametre recherche. 00233 * 00234 * nom : usage 00235 * type : char *[] (cf. IdArgUsage) 00236 * role : Texte d'usage filtre si le label n'est pas trouve. 00237 * 00238 * VOIR AUSSI: IdArgGet... 00239 * 00240 * EXEMPLE: 00241 * START_USAGE(usage) 00242 * ... 00243 * "DIMX : Dimension en X", 00244 * ... 00245 * FINISH_USAGE 00246 * 00247 * ... 00248 * int dimx = IdArgWantInt ( "DIMX", usage ); 00249 * ... 00250 * 00251 ******************************************************** END DESCRIPTION */ 00252 00253 00254 /* FUNCTION DESCRIPTION ************************************************** 00255 * 00256 * IdArgWantString (macro) 00257 * 00258 * RESUME: Saisie de valeurs passees en argument a un filtre. 00259 * 00260 * DESCRIPTION: Saisie de valeurs passees en argument a un filtre. 00261 * Si le label du parametre n'est pas present, appelle la fonction 00262 * IdArgUsage. 00263 * 00264 * SYNTAXE: char *s = IdArgWantString (char * label, char *usage[]); 00265 * 00266 * RETOUR: type : char * 00267 * role : 00268 * 00269 * PARAMETRES: 00270 * nom : label 00271 * type : char * 00272 * role : Label du parametre recherche. 00273 * 00274 * nom : usage 00275 * type : char *[] (cf. IdArgUsage) 00276 * role : Texte d'usage filtre si le label n'est pas trouve. 00277 * 00278 * EXEMPLE: 00279 * START_USAGE(usage) 00280 * ... 00281 * "DIMX : Dimension en X", 00282 * ... 00283 * FINISH_USAGE 00284 * 00285 * ... 00286 * int dimx = IdArgWantInt ( "DIMX", usage ); 00287 * ... 00288 * 00289 ******************************************************** END DESCRIPTION */ 00290 00291 00292 /* FUNCTION DESCRIPTION ************************************************** 00293 * 00294 * IdArgWantFloat (macro) 00295 * 00296 * RESUME: Saisie de valeurs passees en argument a un filtre. 00297 * 00298 * DESCRIPTION: Saisie de valeurs passees en argument a un filtre. 00299 * Si le label du parametre n'est pas present, appelle la fonction 00300 * IdArgUsage. 00301 * 00302 * SYNTAXE: float f = IdArgWantFloat(char *label, char *usage[]); 00303 * 00304 * RETOUR: type : float 00305 * role : 00306 * 00307 * PARAMETRES: 00308 * nom : label 00309 * type : char * 00310 * role : Label du parametre recherche. 00311 * 00312 * nom : usage 00313 * type : char *[] (cf. IdArgUsage) 00314 * role : Texte d'usage filtre si le label n'est pas trouve. 00315 * 00316 * VOIR AUSSI: IdArgGet... 00317 * 00318 * EXEMPLE: 00319 * START_USAGE(usage) 00320 * ... 00321 * "DIMX : Dimension en X", 00322 * ... 00323 * FINISH_USAGE 00324 * 00325 * ... 00326 * int dimx = IdArgWantInt ( "DIMX", usage ); 00327 * ... 00328 * 00329 ******************************************************** END DESCRIPTION */ 00330 00331 00332 #define IdArgWantInt(label,usage) ( (IdArgDefined(label) ) \ 00333 ? (atoi(IdArgValue(label) ) ) \ 00334 : (IdArgUsage(usage),1) ) 00335 00336 #define IdArgWantFloat(label,usage) ( (IdArgDefined(label) ) \ 00337 ? (atof(IdArgValue(label) ) ) \ 00338 : (IdArgUsage(usage),1.0) ) 00339 00340 #define IdArgWantString(label,usage) ( (IdArgDefined(label) ) \ 00341 ? (IdArgValue(label) ) \ 00342 : (IdArgUsage(usage),(char*)0) ) 00343 00344 #ifdef SWIG 00345 int IdArgWantInt(char*,char**); 00346 float IdArgWantFloat(char*,char**); 00347 char* IdArgWantString(char*,char**); 00348 #endif 00349 00350 /* Fonctions internes ******************************************************/ 00351 00352 int _IdArgFree (void); /* Menage en fin d'execution */ 00353 00354 /***************************************************************************/ 00355 #endif