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.
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.
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
17 *************************************************************************/
20 #include "med_outils.hxx"
28 MEDfamCr(med_idt fid,char* maa,char *famille,med_int numero,
29 med_int *attr_ident, med_int *attr_val, char *attr_desc,
30 med_int n_attr,char *groupe, med_int n_groupe)
32 med_idt root, datagroup, famid;
35 char chemin[MED_TAILLE_MAA+MED_TAILLE_FAS+MED_TAILLE_NOM+1];
36 char tmp[MED_TAILLE_FAS+1];
39 * On inhibe le gestionnaire d'erreur HDF 5
41 _MEDmodeErreurVerrouiller();
44 * Si le Data Group FAS n'existe pas, on le cree
46 strcpy(chemin,MED_MAA);
48 strncpy(tmp,MED_FAS,MED_TAILLE_FAS-1);
49 tmp[MED_TAILLE_FAS-1] = '\0';
51 if ((root = _MEDdatagroupOuvrir(fid,chemin)) < 0)
52 if ((root = _MEDdatagroupCreer(fid,chemin)) < 0)
56 * Si le Data Group de meme nom que famille existe => erreur
59 if ((famid = _MEDdatagroupOuvrir(root,famille)) >= 0)
61 if ((famid = _MEDdatagroupCreer(root,famille)) < 0)
67 if ((ret = _MEDattrEntierEcrire(famid,MED_NOM_NUM,&numero,MED_REMP)) < 0)
76 * On cree le Data Group
78 if ((datagroup = _MEDdatagroupCreer(famid,MED_NOM_GRO)) < 0)
84 if ((ret = _MEDattrEntierEcrire(datagroup,MED_NOM_NBR,&n_groupe,MED_REMP)) < 0)
88 * Data Set des noms des groupes "NOM"
90 dimd[0] = n_groupe*MED_TAILLE_LNOM+1;
91 if ((ret = _MEDdatasetStringEcrire(datagroup,MED_NOM_NOM,dimd,groupe,
96 * On ferme le Data Group
98 if ((ret = _MEDdatagroupFermer(datagroup)) < 0)
103 * Le Data Group "ATT"
108 if ((datagroup = _MEDdatagroupCreer(famid,MED_NOM_ATT)) < 0)
114 if ((ret = _MEDattrEntierEcrire(datagroup,MED_NOM_NBR,&n_attr,MED_REMP)) < 0)
121 #if defined(IRIX64)||defined(OSF1)
122 if ((ret = _MEDdatasetNumEcrire(datagroup,MED_NOM_IDE,MED_INT64,MED_NO_INTERLACE,MED_DIM1,MED_ALL,MED_NOPF,0,MED_NOPG,dimd,
123 (unsigned char *)attr_ident,MED_REMP)) < 0)
126 if ((ret = _MEDdatasetNumEcrire(datagroup,MED_NOM_IDE,MED_INT32,MED_NO_INTERLACE,MED_DIM1,MED_ALL,MED_NOPF,0,MED_NOPG,dimd,
127 (unsigned char *)attr_ident,MED_REMP)) < 0)
135 #if defined(IRIX64)||defined(OSF1)
136 if ((ret = _MEDdatasetNumEcrire(datagroup,MED_NOM_VAL,MED_INT64,MED_NO_INTERLACE,MED_DIM1,MED_ALL,MED_NOPF,0,MED_NOPG,dimd,
137 (unsigned char*)attr_val,MED_REMP)) < 0)
140 if ((ret = _MEDdatasetNumEcrire(datagroup,MED_NOM_VAL,MED_INT32,MED_NO_INTERLACE,MED_DIM1,MED_ALL,MED_NOPF,0,MED_NOPG,dimd,
141 (unsigned char*)attr_val,MED_REMP)) < 0)
148 dimd[0] = n_attr*MED_TAILLE_DESC+1;
149 if ((ret = _MEDdatasetStringEcrire(datagroup,MED_NOM_DES,dimd,attr_desc,
154 * On ferme le Data Group
156 if ((ret = _MEDdatagroupFermer(datagroup)) < 0)
163 if ((ret = _MEDdatagroupFermer(famid)) < 0)
165 if ((ret = _MEDdatagroupFermer(root)) < 0)