MEDversionedApiC.c
Aller à la documentation de ce fichier.00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 #include <stdio.h>
00020 #include <med_config.h>
00021 #include <med_misc.h>
00022 #include <med_utils.h>
00023 
00024 extern MedFuncType getVersionedApi(const char * const keycharpart,
00025                                    const char * const keynumpart);
00026 
00027 
00028 
00029 
00030 MedFuncType _MEDversionedApi( char * key, med_int majeur,
00031                               med_int mineur, med_int release) {
00032   char    version[4]="";
00033   int     n=0;
00034   int     itrelease, minrelease=0;
00035   int     versionMMR,versionMM;
00036   MedFuncType func=(MedFuncType) NULL;
00037   int imajeur=(int)majeur, imineur=(int)mineur, irelease=(int)release;
00038 
00039   versionMM  = 100*imajeur+10*imineur;
00040   versionMMR = versionMM+irelease;
00041 
00042   if ( versionMMR <  220 ) {
00043     MESSAGE("Cette bibliothèque MED n'est pas capable de lire un fichier MED de version < 2.2.0");
00044     MESSAGE("La version demandée est :");
00045     ISCRUTE_int(versionMMR);
00046     goto QUIT;
00047   }
00048 
00049   if ( versionMM > 100*MED_NUM_MAJEUR+10*MED_NUM_MINEUR ) {
00050     MESSAGE("Cette bibliothèque MED n'est pas capable de lire un fichier MED dont le mineur de la version"
00051             "excède celui de la bibliothèque.");
00052     MESSAGE("La version demandée est :");ISCRUTE_int(versionMMR);
00053     goto QUIT;
00054   }
00055 
00056   if ( versionMMR <= 231 ) {
00057     imajeur=2;imineur=3;irelease=1;
00058   }
00059 
00060   
00061   
00062   
00063   
00064   
00065   if (versionMMR < 240 ) {
00066 
00067     minrelease=1;
00068 
00069     
00070     itrelease = irelease;
00071     while ( ( func == (MedFuncType)NULL) && (minrelease <= itrelease ) ) {
00072 
00073 #ifdef PPRO_NT
00074       n = _snprintf(version,4,"%d%d%d",imajeur,imineur,itrelease);
00075 #else
00076       n = snprintf(version,4,"%d%d%d",imajeur,imineur,itrelease);
00077 #endif
00078       if ( (n < 0) || (n > 3) ) {
00079         MESSAGE("Impossible d'obtenir un numéro de version valide : ");
00080         version[3]='\0';
00081         SSCRUTE(version);
00082         break;
00083       }
00084 
00085       func=getVersionedApi(key,version);
00086       --itrelease;
00087     }
00088     goto QUIT;
00089   }
00090 
00091   
00092 
00093 
00094 
00095 #ifdef PPRO_NT
00096   n = _snprintf(version,4, IFORMAT IFORMAT IFORMAT,majeur,mineur,0);
00097 #else
00098   n = snprintf(version,4, IFORMAT IFORMAT IFORMAT,majeur,mineur,0);
00099 #endif
00100   if ( (n < 0) || (n > 3) ) {
00101     MESSAGE("Impossible d'obtenir un numéro de version valide : ");
00102     version[3]='\0';
00103     SSCRUTE(version);
00104     goto QUIT;
00105   }
00106 
00107   func=getVersionedApi(key,version);
00108 
00109  QUIT:
00110   if (func == NULL) {
00111     MESSAGE("Impossible d'obtenir une implémentation de : ");
00112     SSCRUTE(key);
00113     MESSAGE("en version :");
00114     ISCRUTE_int(versionMMR);
00115     MESSAGE("Vérifiez votre fichier .med");
00116   }
00117 
00118   return func;
00119 }
00120 
00121