]> SALOME platform Git repositories - modules/med.git/blob - src/MEDMEM/MEDMEM_MedVersion.cxx
Salome HOME
Merge from V6_main_20120808 08Aug12
[modules/med.git] / src / MEDMEM / MEDMEM_MedVersion.cxx
1 // Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
10 //
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 // Lesser General Public License for more details.
15 //
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 //
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22
23 #include "MEDMEM_MedVersion.hxx"
24 #include "MEDMEM_Utilities.hxx"
25
26 using namespace MEDMEM;
27 using namespace MED_EN;
28
29 medFileVersion MEDMEM::getMedFileVersion(const string & fileName)
30   throw (MEDEXCEPTION)
31 {
32   medFileVersion version;
33
34   med_2_3::med_idt fid22;
35
36   med_2_3::med_err ret22;
37
38   med_2_3::med_int major22;
39   med_2_3::med_int minor22;
40   med_2_3::med_int release22;
41
42   med_2_3::med_access_mode access22 = med_2_3::MED_ACC_RDONLY;
43
44   /*
45     Med Version 2.3 access to the file
46   */
47
48   fid22 = med_2_3::MEDfileOpen(fileName.c_str(),access22);
49
50   if (fid22 < 0)
51     throw MEDEXCEPTION("Problem in getMedFileVersion(const string &) Med file V2.2 access");
52
53   ret22 = med_2_3::MEDfileNumVersionRd(fid22,&major22,&minor22,&release22);
54
55   if (ret22 < 0)
56     throw MEDEXCEPTION("Problem in getMedFileVersion(const string &) Med file V2.2 version numbers reading");
57
58   if ((minor22 == -1) || (release22 == -1))
59     {
60       MESSAGE_MED("getMedFileVersion the file may have been produced by a version 2.1.x x<5");
61       minor22 = 1;
62       release22 = 5;
63     }
64
65   ret22 = med_2_3::MEDfileClose(fid22);
66
67   if (ret22 < 0)
68     throw MEDEXCEPTION("Problem in getMedFileVersion(const string &) Med file V2.2 file closing");
69
70   if (major22 == 2)
71     {
72       if (minor22 == 1)
73         version = V21;
74       else if (minor22 > 1)
75         version = V22;
76     }
77   else
78     version = V22;
79
80   MESSAGE_MED("getMedFileVersion the version of the file is " << version);
81
82   return version;
83 }
84
85 med_2_3::med_access_mode MEDMEM::getMedAccessMode(MED_EN::med_mode_acces mode)
86 {
87   //from med.h:
88   //    MED_ACC_RDONLY, /**<Ouverture en lecture seule*/
89   //    MED_ACC_RDWR,   /**<Ouverture en lecture/ecriture, si un élément existe il est écrasé*/
90   //    MED_ACC_RDEXT,  /**<Ouverture en lecture/ecriture, si un élément existe une erreur est générée*/
91   //    MED_ACC_CREAT,  /**<Créer le fichier s'il n'existe pas, l'écrase sinon*/
92   //    MED_ACC_UNDEF   /**<Variable globale interne initialisée au mode d'ouverture*/ 
93   switch ( mode ) {
94   case MED_EN::RDONLY: return med_2_3::MED_ACC_RDONLY;
95   case MED_EN::WRONLY: return med_2_3::MED_ACC_CREAT;
96   case MED_EN::RDWR:   return med_2_3::MED_ACC_RDWR;
97   default:
98     return med_2_3::med_access_mode( mode );
99   }
100 }