Salome HOME
merging the main trunk with the BrForComp branch to build a pre V3_0_1
[modules/med.git] / src / MEDMEM / MEDMEM_MedVersion.cxx
1 #include "MEDMEM_MedVersion.hxx"
2 #include "utilities.h"
3 #include "MEDMEM_Compatibility21_22.hxx"
4
5 using namespace MEDMEM;
6 using namespace MED_EN;
7
8 medFileVersion MEDMEM::getMedFileVersion(const string & fileName)
9   throw (MEDEXCEPTION)
10 {
11   medFileVersion version;
12
13   med_2_1::med_idt fid21;
14   med_2_2::med_idt fid22;
15
16   med_2_1::med_err ret21;
17   med_2_2::med_err ret22;
18
19   med_2_1::med_int major21;
20   med_2_1::med_int minor21;
21   med_2_1::med_int release21;
22
23   med_2_2::med_int major22;
24   med_2_2::med_int minor22;
25   med_2_2::med_int release22;
26
27   med_2_2::med_mode_acces access22 = med_2_2::MED_LECTURE;
28   med_2_1::med_mode_acces access21 = med_2_1::MED_LECT;
29
30   /*
31     Med Version 2.1 access to the file
32   */
33
34   fid21 = med_2_1::MEDouvrir((const_cast <char *> (fileName.c_str())),
35                              access21);
36
37   if (fid21 < 0)
38     throw MEDEXCEPTION("Problem in getMedFileVersion(const string &) Med file V2.1 access");
39
40   ret21 = med_2_1::MEDversionLire(fid21,&major21,&minor21,&release21);
41
42   if (ret21 < 0)
43     throw MEDEXCEPTION("Problem in getMedFileVersion(const string &) Med file V2.1 version numbers reading");
44
45   if ((minor21 == -1) || (release21 == -1))
46     {
47       MESSAGE("getMedFileVersion the file may have been produced by a version 2.1.x x<5");
48       minor21 = 1;
49       release21 = 5;
50     }
51
52   ret21 = med_2_1::MEDfermer(fid21);
53
54   if (ret21 < 0)
55     throw MEDEXCEPTION("Problem in getMedFileVersion(const string &) Med file V2.1 file closing");
56
57   /*
58     Med Version 2.2 access to the file
59   */
60
61   fid22 = med_2_2::MEDouvrir((const_cast <char *> (fileName.c_str())),
62                              access22);
63
64   if (fid22 < 0)
65     throw MEDEXCEPTION("Problem in getMedFileVersion(const string &) Med file V2.2 access");
66
67   ret22 = med_2_2::MEDversionLire(fid22,&major22,&minor22,&release22);
68
69   if (ret22 < 0)
70     throw MEDEXCEPTION("Problem in getMedFileVersion(const string &) Med file V2.2 version numbers reading");
71
72   if ((minor22 == -1) || (release22 == -1))
73     {
74       MESSAGE("getMedFileVersion the file may have been produced by a version 2.1.x x<5");
75       minor22 = 1;
76       release22 = 5;
77     }
78
79   ret22 = med_2_2::MEDfermer(fid22);
80
81   if (ret22 < 0)
82     throw MEDEXCEPTION("Problem in getMedFileVersion(const string &) Med file V2.2 file closing");
83
84   if ((major21 != major22) || (minor21 != minor22) || (release21 != release22))
85     throw MEDEXCEPTION("Problem in getMedFileVersion(const string &) Med file V21 and V22 version numbers are different");
86
87   MESSAGE("getMedFileVersion: status version 21 of the file major " << major21 << " minor " << minor21 << " release " << release21);
88
89   MESSAGE("getMedFileVersion: status version 22 of the file major " << major22 << " minor " << minor22 << " release " << release22);
90
91   if (major21 == 2)
92     {
93       if (minor21 == 1)
94         version = V21;
95       else if (minor21 > 1)
96         version = V22;
97     }
98   else
99     version = V22;
100
101   MESSAGE("getMedFileVersion the version of the file is " << version);
102
103   return version;
104 }