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