Salome HOME
Join modifications from BR_Dev_For_4_0 tag V4_1_1.
[modules/med.git] / src / MEDMEM / MEDMEM_MedVersion.cxx
index 3ad0a36a9a77dad23cb455bd86bfda8421ebe0df..3cbc7031d9dd31732ffcbb6d55ae78097b928b94 100644 (file)
@@ -30,20 +30,20 @@ medFileVersion MEDMEM::getMedFileVersion(const string & fileName)
   medFileVersion version;
 
   med_2_1::med_idt fid21;
-  med_2_2::med_idt fid22;
+  med_2_3::med_idt fid22;
 
   med_2_1::med_err ret21;
-  med_2_2::med_err ret22;
+  med_2_3::med_err ret22;
 
   med_2_1::med_int major21;
   med_2_1::med_int minor21;
   med_2_1::med_int release21;
 
-  med_2_2::med_int major22;
-  med_2_2::med_int minor22;
-  med_2_2::med_int release22;
+  med_2_3::med_int major22;
+  med_2_3::med_int minor22;
+  med_2_3::med_int release22;
 
-  med_2_2::med_mode_acces access22 = med_2_2::MED_LECTURE;
+  med_2_3::med_mode_acces access22 = med_2_3::MED_LECTURE;
   med_2_1::med_mode_acces access21 = med_2_1::MED_LECT;
 
   /*
@@ -74,16 +74,16 @@ medFileVersion MEDMEM::getMedFileVersion(const string & fileName)
     throw MEDEXCEPTION("Problem in getMedFileVersion(const string &) Med file V2.1 file closing");
 
   /*
-    Med Version 2.2 access to the file
+    Med Version 2.3 access to the file
   */
 
-  fid22 = med_2_2::MEDouvrir((const_cast <char *> (fileName.c_str())),
+  fid22 = med_2_3::MEDouvrir((const_cast <char *> (fileName.c_str())),
                             access22);
 
   if (fid22 < 0)
     throw MEDEXCEPTION("Problem in getMedFileVersion(const string &) Med file V2.2 access");
 
-  ret22 = med_2_2::MEDversionLire(fid22,&major22,&minor22,&release22);
+  ret22 = med_2_3::MEDversionLire(fid22,&major22,&minor22,&release22);
 
   if (ret22 < 0)
     throw MEDEXCEPTION("Problem in getMedFileVersion(const string &) Med file V2.2 version numbers reading");
@@ -95,7 +95,7 @@ medFileVersion MEDMEM::getMedFileVersion(const string & fileName)
       release22 = 5;
     }
 
-  ret22 = med_2_2::MEDfermer(fid22);
+  ret22 = med_2_3::MEDfermer(fid22);
 
   if (ret22 < 0)
     throw MEDEXCEPTION("Problem in getMedFileVersion(const string &) Med file V2.2 file closing");
@@ -121,3 +121,76 @@ medFileVersion MEDMEM::getMedFileVersion(const string & fileName)
 
   return version;
 }
+
+//================================================================================
+/*!
+ * \brief return file mode access corresponding to MED_EN::med_mode_acces in given med version
+  * \param mode - either MED_LECT, MED_ECRI or MED_REMP
+  * \param medVersion - V21 or V22 or ??
+  * \retval int - file mode access
+  *
+  * To be used in MEDouvrir() call
+ */
+//================================================================================
+
+int MEDMEM::getMedAccessMode(MED_EN::med_mode_acces mode,
+                             MED_EN::medFileVersion medVersion)
+  throw (MEDEXCEPTION)
+{
+  switch ( medVersion ) {
+  case V21:
+/*
+  from MEDouvrir.c:
+     switch(mode_acces)
+    {
+    case MED_LECT :
+      if (access(nom,F_OK))
+       return -1;
+      else 
+       if ((fid = _MEDfichierOuvrir(nom,mode_acces)) < 0)
+         return -1;
+      break;
+
+    case MED_ECRI :
+      if (access(nom,F_OK))
+       {
+         if ((fid = _MEDfichierCreer(nom)) < 0)
+           return -1;
+       }
+      else
+       if ((fid = _MEDfichierOuvrir(nom,mode_acces)) < 0)
+         return -1;
+      break;
+
+    case MED_REMP :
+      if ((fid = _MEDfichierCreer(nom)) < 0)
+       return -1;
+      break;
+*/
+    switch ( mode ) {
+    case MED_EN::MED_LECT: return med_2_1::MED_LECT;
+    case MED_EN::MED_ECRI: return med_2_1::MED_ECRI;
+    case MED_EN::MED_REMP: return med_2_1::MED_ECRI;
+    default:
+      throw MEDEXCEPTION("getMedAccessMode(): Wrong access mode");
+    }
+  case V22:
+/*
+  from med.h:
+   MED_LECTURE          : Ouverture en lecture seule
+   MED_LECTURE_ECRITURE : Ouverture en lecture/ecriture, si un élément existe il est écrasé
+   MED_LECTURE_AJOUT    : Ouverture en lecture/ecriture, si un élément existe une erreur est générée
+   MED_CREATION         : Créer le fichier s'il n'existe pas, l'écrase sinon
+*/
+    switch ( mode ) {
+    case MED_EN::MED_LECT: return med_2_3::MED_LECTURE;
+    case MED_EN::MED_ECRI: return med_2_3::MED_LECTURE_ECRITURE;
+    case MED_EN::MED_REMP: return med_2_3::MED_LECTURE_ECRITURE;
+               case MED_EN::MED_CREA: return med_2_3::MED_CREATION;
+    default:
+      throw MEDEXCEPTION("getMedAccessMode(): Wrong access mode");
+    }
+  default:;
+  }
+  throw MEDEXCEPTION("getMedAccessMode(): Unknown med version");
+}