00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include <med.h>
00020 #include <med_config.h>
00021 #include <med_outils.h>
00022
00023 #include <string.h>
00024 #include <stdlib.h>
00025
00026 void
00027 MEDfamCr231(int dummy,...)
00028 {
00029
00030 med_idt fid;
00031 char *maa;
00032 char *famille;
00033 med_int numero;
00034 med_int *attr_ident;
00035 med_int *attr_val;
00036 char *attr_desc;
00037 med_int n_attr;
00038 char *groupe;
00039 med_int n_groupe;
00040 med_err *fret ;
00041
00042 med_idt root=0, datagroup=0, famid=0;
00043 med_err ret=-1;
00044 med_size dimd[1];
00045 char chemin[MED_TAILLE_MAA+MED_TAILLE_FAS+MED_TAILLE_FAS_ENTITE+MED_TAILLE_NOM+1];
00046 char tmp[MED_TAILLE_FAS+1];
00047 char stockage[MED_TAILLE_FAS_ENTITE+1] = "NONE";
00048 med_mode_acces MED_MODE_ACCES;
00049
00050 va_list params;
00051 va_start(params,dummy);
00052
00053 fid = va_arg(params, med_idt );
00054 maa = va_arg(params, char* );
00055 famille = va_arg(params, char* );
00056 numero = va_arg(params, med_int );
00057 attr_ident = va_arg(params, med_int*);
00058 attr_val = va_arg(params, med_int*);
00059 attr_desc = va_arg(params, char* );
00060 n_attr = va_arg(params, med_int );
00061 groupe = va_arg(params, char* );
00062 n_groupe = va_arg(params, med_int );
00063 fret = va_arg(params, med_err*);
00064
00065
00066
00067
00068 _MEDmodeErreurVerrouiller();
00069 if (MEDcheckVersion(fid) < 0) {*fret=-1;return;}
00070
00071
00072 if ( (MED_MODE_ACCES = _MEDmodeAcces(fid) ) == MED_UNDEF_MODE_ACCES ) {
00073 MESSAGE("Impossible de déterminer le mode d'acces au fichier.");
00074 goto ERROR;
00075 }
00076
00077 if ( MED_MODE_ACCES == MED_LECTURE) {
00078 MESSAGE("Impossible de créer une famille en mode MED_LECTURE.");
00079 goto ERROR;
00080 };
00081
00082
00083
00084
00085 strcpy(chemin,MED_MAA);
00086
00087
00088
00089 strcat(chemin,maa);
00090 strncpy(tmp,MED_FAS,MED_TAILLE_FAS-1);
00091 tmp[MED_TAILLE_FAS-1] = '\0';
00092 strcat(chemin,tmp);
00093
00094 if ((root = _MEDdatagroupOuvrir(fid,chemin)) < 0)
00095 if ((root = _MEDdatagroupCreer(fid,chemin)) < 0) {
00096 MESSAGE("Erreur à la création du datagroup : ");
00097 SSCRUTE(chemin);
00098 goto ERROR;
00099 }
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110 if (numero != 0) {
00111 if ((ret = _MEDdatagroupFermer(root)) < 0) {
00112 MESSAGE("Impossible de fermer le datagroup : ");
00113 ISCRUTE_id(root);ret = -1;
00114 goto ERROR;
00115 }
00116
00117 if (numero > 0)
00118 strncpy(stockage,MED_FAS_NOEUD,MED_TAILLE_FAS_ENTITE-1);
00119
00120 if (numero < 0)
00121 strncpy(stockage,MED_FAS_ELEME,MED_TAILLE_FAS_ENTITE-1);
00122
00123 stockage[MED_TAILLE_FAS_ENTITE-1] = '\0';
00124 strcat(chemin,stockage);
00125
00126 if ((root = _MEDdatagroupOuvrir(fid,chemin)) < 0)
00127 if ((root = _MEDdatagroupCreer(fid,chemin)) < 0) {
00128 MESSAGE("Erreur à la création du datagroup : ");
00129 SSCRUTE(chemin);
00130 goto ERROR;
00131 }
00132 }
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143 if (numero == 0)
00144 strcpy(famille,FAMILLE_ZERO);
00145
00146
00147
00148
00149 if ((famid = _MEDdatagroupCreer(root,famille)) < 0) {
00150 MESSAGE("Erreur à la création du famille : ");
00151 SSCRUTE(famille);
00152 goto ERROR;
00153 }
00154
00155
00156
00157
00158
00159 if ((ret = _MEDattrEntierEcrire(famid,MED_NOM_NUM,&numero)) < 0) {
00160 MESSAGE("Erreur à l'écriture du numéro de famille : ");
00161 ISCRUTE(numero);
00162 goto ERROR;
00163 }
00164
00165
00166
00167
00168
00169 if (n_groupe > 0) {
00170
00171
00172
00173
00174 if ((datagroup = _MEDdatagroupCreer(famid,MED_NOM_GRO)) < 0) {
00175 MESSAGE("Erreur à la création du datagroup : ");
00176 SSCRUTE(MED_NOM_GRO);
00177 goto ERROR;
00178 }
00179
00180
00181
00182 if ((ret = _MEDattrEntierEcrire(datagroup,MED_NOM_NBR,&n_groupe)) < 0) {
00183 MESSAGE("Erreur à l'écriture du nombre de groupe : ");
00184 ISCRUTE(n_groupe);
00185 goto ERROR;
00186 }
00187
00188
00189
00190 dimd[0] = n_groupe*MED_TAILLE_LNOM+1;
00191 if ((ret = _MEDdatasetStringEcrire(datagroup,MED_NOM_NOM,dimd,groupe))<0) {
00192 MESSAGE("Erreur à l'écriture des noms des groupes : ");
00193 SSCRUTE(groupe);
00194 goto ERROR;
00195 }
00196
00197
00198
00199 if ((ret = _MEDdatagroupFermer(datagroup)) < 0) {
00200 MESSAGE("Impossible de fermer le datagroup : ");
00201 ISCRUTE_int(datagroup);
00202 goto ERROR;
00203 }
00204
00205 }
00206
00207
00208
00209
00210
00211
00212 if (n_attr > 0) {
00213
00214 if ((datagroup = _MEDdatagroupCreer(famid,MED_NOM_ATT)) < 0) {
00215 MESSAGE("Erreur à la création du datagroup : ");
00216 SSCRUTE(MED_NOM_ATT);
00217 goto ERROR;
00218 }
00219
00220
00221
00222 if ((ret = _MEDattrEntierEcrire(datagroup,MED_NOM_NBR,&n_attr)) < 0) {
00223 MESSAGE("Erreur à l'écriture du nombre d'attributs : ");
00224 ISCRUTE(n_attr);
00225 goto ERROR;
00226 }
00227
00228
00229
00230 dimd[0] = n_attr;
00231 #if defined(HAVE_F77INT64)
00232 if ((ret = _MEDdatasetNumEcrire(datagroup,MED_NOM_IDE,MED_INT64,MED_NO_INTERLACE,MED_DIM1,MED_ALL,MED_NOPF,MED_NO_PFLMOD,0,0,MED_NOPG,dimd,
00233 (unsigned char *)attr_ident)) < 0) {
00234 MESSAGE("Erreur à l'écriture du dataset : ");
00235 SSCRUTE(MED_NOM_IDE);
00236 goto ERROR;
00237 }
00238 #else
00239 if ((ret = _MEDdatasetNumEcrire(datagroup,MED_NOM_IDE,MED_INT32,MED_NO_INTERLACE,MED_DIM1,MED_ALL,MED_NOPF,MED_NO_PFLMOD,0,0,MED_NOPG,dimd,
00240 (unsigned char *)attr_ident)) < 0) {
00241 MESSAGE("Erreur à l'écriture du dataset : ");
00242 SSCRUTE(MED_NOM_IDE);
00243 goto ERROR;
00244 }
00245 #endif
00246
00247
00248
00249 dimd[0] = n_attr;
00250 #if defined(HAVE_F77INT64)
00251 if ((ret = _MEDdatasetNumEcrire(datagroup,MED_NOM_VAL,MED_INT64,MED_NO_INTERLACE,MED_DIM1,MED_ALL,MED_NOPF,MED_NO_PFLMOD,0,0,MED_NOPG,dimd,
00252 (unsigned char*)attr_val)) < 0) {
00253 MESSAGE("Erreur à l'écriture du dataset : ");
00254 SSCRUTE(MED_NOM_VAL);
00255 goto ERROR;
00256 }
00257 #else
00258 if ((ret = _MEDdatasetNumEcrire(datagroup,MED_NOM_VAL,MED_INT32,MED_NO_INTERLACE,MED_DIM1,MED_ALL,MED_NOPF,MED_NO_PFLMOD,0,0,MED_NOPG,dimd,
00259 (unsigned char*)attr_val)) < 0) {
00260 MESSAGE("Erreur à l'écriture du dataset : ");
00261 SSCRUTE(MED_NOM_VAL);
00262 goto ERROR;
00263 }
00264 #endif
00265
00266
00267
00268 dimd[0] = n_attr*MED_TAILLE_DESC+1;
00269 if ((ret = _MEDdatasetStringEcrire(datagroup,MED_NOM_DES,dimd,attr_desc)) < 0) {
00270 MESSAGE("Erreur à l'écriture du dataset : ");
00271 SSCRUTE(MED_NOM_DES);
00272 goto ERROR;
00273 }
00274
00275
00276
00277 if ((ret = _MEDdatagroupFermer(datagroup)) < 0) {
00278 MESSAGE("Impossible de fermer le datagroup : ");
00279 ISCRUTE_int(datagroup);
00280 goto ERROR;
00281 }
00282 }
00283
00284
00285
00286
00287
00288 ret=0;
00289 ERROR:
00290 if (famid>0) if (_MEDdatagroupFermer(famid) < 0) {
00291 MESSAGE("Impossible de fermer le datagroup : ");
00292 ISCRUTE_id(famid);ret = -1;
00293 }
00294
00295 if (root>0) if (_MEDdatagroupFermer(root) < 0) {
00296 MESSAGE("Impossible de fermer le datagroup : ");
00297 ISCRUTE_id(root); ret = -1;
00298 }
00299
00300 va_end(params);
00301 *fret = ret;
00302 return;
00303 }