Salome HOME
update with the version in the OCC branch OCC_development_generic_2006.
[modules/med.git] / src / MEDWrapper / V2_1 / Core / MEDnFam.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 <string.h>
23 #include <stdlib.h>
24
25 namespace med_2_1{
26
27 med_int 
28 MEDnFam(med_idt fid,char *maa, int indice, med_dim_famille quoi)
29 {
30   med_idt datagroup,famid;
31   med_err ret;
32   char chemin[MED_TAILLE_MAA+MED_TAILLE_FAS+2*MED_TAILLE_NOM+1];
33   med_int n;
34   int n_tmp;
35   int num;
36   char famille[MED_TAILLE_NOM+1];
37
38
39   /* 
40    * On inhibe le gestionnaire d'erreur HDF 
41    */
42   _MEDmodeErreurVerrouiller();
43
44   strcpy(chemin,MED_MAA);
45   strcat(chemin,maa);
46   strcat(chemin,MED_FAS);
47   if (indice == 0)
48     {
49       n_tmp = 0;
50       _MEDnObjets(fid,chemin,&n_tmp);
51       n = (med_int ) n_tmp;
52     }
53   else
54     {
55       /*
56        * On recupere le nom de la famille
57        */
58       num = indice - 1;
59       if ((ret = _MEDobjetIdentifier(fid,chemin,num,
60                             famille)) < 0)
61         return -1;
62       
63   /* 
64    * Si le Data Group de la famille n'existe pas => erreur
65    */
66       strcat(chemin,famille);
67       if ((famid = _MEDdatagroupOuvrir(fid,chemin)) < 0)
68         return -1;
69
70       switch (quoi)
71         {
72         case MED_GROUPE :
73           if ((datagroup = _MEDdatagroupOuvrir(famid,MED_NOM_GRO)) < 0)
74             n = 0;
75           else
76             {
77               if ((ret = _MEDattrEntierLire(datagroup,MED_NOM_NBR,&n)) < 0)
78                 return -1;
79               if ((ret = _MEDdatagroupFermer(datagroup)) < 0)
80                 return -1;
81             }
82           break;
83
84         case MED_ATTR :
85           if ((datagroup = _MEDdatagroupOuvrir(famid,MED_NOM_ATT)) < 0)
86             n = 0;
87           else
88             {
89               if ((ret = _MEDattrEntierLire(datagroup,MED_NOM_NBR,&n)) < 0)
90                 return -1;
91               if ((ret = _MEDdatagroupFermer(datagroup)) < 0)
92                 return -1;
93             }
94           break;
95
96         default :
97           return -1;
98         }
99
100       if ((ret = _MEDdatagroupFermer(famid)) < 0)
101         return -1;
102
103     }
104
105   return (med_int) n;
106 }
107
108 }