Salome HOME
Merge from V6_main_20120808 08Aug12
[modules/med.git] / src / MEDWrapper / V2_1 / Core / MEDfamInfo.cxx
1 /*************************************************************************
2 * COPYRIGHT (C) 1999 - 2002  EDF R&D
3 * THIS LIBRARY IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
4 * IT UNDER THE TERMS OF THE GNU LESSER GENERAL PUBLIC LICENSE 
5 * AS PUBLISHED BY THE FREE SOFTWARE FOUNDATION; 
6 * EITHER VERSION 2.1 OF THE LICENSE, OR (AT YOUR OPTION) ANY LATER VERSION.
7 *  
8 * THIS LIBRARY IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
9 * WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
10 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
11 * LESSER GENERAL PUBLIC LICENSE FOR MORE DETAILS.
12 *
13 * YOU SHOULD HAVE RECEIVED A COPY OF THE GNU LESSER GENERAL PUBLIC LICENSE
14 * ALONG WITH THIS LIBRARY; IF NOT, WRITE TO THE FREE SOFTWARE FOUNDATION,
15 * INC., 59 TEMPLE PLACE, SUITE 330, BOSTON, MA 02111-1307 USA
16 *
17 *************************************************************************/
18
19 #include "med.hxx"
20 #include "med_outils.hxx"
21
22 #include <stdlib.h>
23 #include <string.h>
24
25 namespace med_2_1{
26
27 med_err 
28 MEDfamInfo(med_idt fid,char *maa,int indice, char *famille, 
29            med_int *numero,
30            med_int *attr_ident, med_int *attr_val, char *attr_desc,
31            med_int *n_attr, char *groupe ,med_int *n_groupe)
32 {
33   med_idt famid,datagroup;
34   med_err ret;
35   char chemin[MED_TAILLE_MAA+MED_TAILLE_FAS+2*MED_TAILLE_NOM+1];
36   int num;
37
38   /*
39    * On inhibe le gestionnaire d'erreur HDF 5
40    */
41   _MEDmodeErreurVerrouiller();
42
43   /*
44    * On recupere le nom de la famille
45    */
46   num = indice - 1;
47   strcpy(chemin,MED_MAA);
48   strcat(chemin,maa);
49   strcat(chemin,MED_FAS); 
50   if ((ret = _MEDobjetIdentifier(fid,chemin,num,famille)) < 0)
51     return -1;
52
53   /* 
54    * Si le Data Group de la famille n'existe pas => erreur
55    */
56   strcat(chemin,famille);
57   if ((famid = _MEDdatagroupOuvrir(fid,chemin)) < 0)
58     return -1;
59
60   /*
61    * L'attribut NUM
62    */
63   if ((ret = _MEDattrEntierLire(famid,MED_NOM_NUM,numero)) < 0)
64     return -1;
65
66   /*
67    * Le Data Group "GRO"
68    */
69   if ((datagroup = _MEDdatagroupOuvrir(famid,MED_NOM_GRO)) >= 0)
70     {
71       /*
72        * L'attribut "NBR"
73        */
74       if ((ret = _MEDattrEntierLire(datagroup,MED_NOM_NBR,n_groupe)) < 0)
75         return -1;
76       
77       /* 
78        * Data Set des noms des groupes "NOM"
79        */
80       if ((ret = _MEDdatasetStringLire(datagroup,MED_NOM_NOM,groupe)) < 0)
81         return -1;
82
83       /* 
84        * On ferme le Data Group
85        */
86       if ((ret = _MEDdatagroupFermer(datagroup)) < 0)
87         return -1;
88     }
89   else
90     *n_groupe = 0;
91
92   /*
93    * Le Data Group "ATT"
94    */
95   if ((datagroup = _MEDdatagroupOuvrir(famid,MED_NOM_ATT)) >= 0)
96     {
97       /*
98        * L'attribut "NBR"
99        */
100       if ((ret = _MEDattrEntierLire(datagroup,MED_NOM_NBR,n_attr)) < 0)
101         return -1;
102       
103       /*
104        * Le Data Set "IDE"
105        */
106 #if defined(HAVE_F77INT64)
107       if ((ret = _MEDdatasetNumLire(datagroup,MED_NOM_IDE,MED_INT64,
108                                     MED_NO_INTERLACE,1,MED_ALL,
109                                     MED_NOPF,0,MED_NOPG,
110                                     (unsigned char*) attr_ident)) < 0)
111         return -1;     
112 #else
113       if ((ret = _MEDdatasetNumLire(datagroup,MED_NOM_IDE,MED_INT32,
114                                     MED_NO_INTERLACE,1,MED_ALL,
115                                     MED_NOPF,0,MED_NOPG,
116                                     (unsigned char*) attr_ident)) < 0)
117         return -1;     
118 #endif
119
120       /*
121        * Le Data Set "VAL"
122        */
123 #if defined(HAVE_F77INT64)
124       if ((ret = _MEDdatasetNumLire(datagroup,MED_NOM_VAL,MED_INT64,
125                                     MED_NO_INTERLACE,1,MED_ALL,
126                                     MED_NOPF,0,MED_NOPG,
127                                     (unsigned char *) attr_val)) < 0)
128         return -1;
129 #else
130       if ((ret = _MEDdatasetNumLire(datagroup,MED_NOM_VAL,MED_INT32,
131                                     MED_NO_INTERLACE,1,MED_ALL,
132                                     MED_NOPF,0,MED_NOPG,
133                                     (unsigned char *) attr_val)) < 0)
134         return -1;
135 #endif
136
137       /*
138        * Le Data Set "DES"
139        */
140       ret = _MEDdatasetStringLire(datagroup,MED_NOM_DES,attr_desc);
141
142       /* 
143        * On ferme le Data Group
144        */
145       if ((ret = _MEDdatagroupFermer(datagroup)) < 0)
146         return -1;
147     }
148   else
149     *n_attr = 0;
150
151   /* 
152    * On ferme tout
153    */ 
154   if ((ret = _MEDdatagroupFermer(famid)) < 0)
155     return -1;
156
157   return 0; 
158 }
159
160 }