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 MEDfamCr232(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 NOFINALBLANK(maa,ERROR);
00087 strcat(chemin,maa);
00088 strncpy(tmp,MED_FAS,MED_TAILLE_FAS-1);
00089 tmp[MED_TAILLE_FAS-1] = '\0';
00090 strcat(chemin,tmp);
00091
00092 if ((root = _MEDdatagroupOuvrir(fid,chemin)) < 0)
00093 if ((root = _MEDdatagroupCreer(fid,chemin)) < 0) {
00094 MESSAGE("Erreur à la création du datagroup : ");
00095 SSCRUTE(chemin);
00096 goto ERROR;
00097 }
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108 if (numero != 0) {
00109 if ((ret = _MEDdatagroupFermer(root)) < 0) {
00110 MESSAGE("Impossible de fermer le datagroup : ");
00111 ISCRUTE_id(root);ret = -1;
00112 goto ERROR;
00113 }
00114
00115 if (numero > 0)
00116 strncpy(stockage,MED_FAS_NOEUD,MED_TAILLE_FAS_ENTITE-1);
00117
00118 if (numero < 0)
00119 strncpy(stockage,MED_FAS_ELEME,MED_TAILLE_FAS_ENTITE-1);
00120
00121 stockage[MED_TAILLE_FAS_ENTITE-1] = '\0';
00122 strcat(chemin,stockage);
00123
00124 if ((root = _MEDdatagroupOuvrir(fid,chemin)) < 0)
00125 if ((root = _MEDdatagroupCreer(fid,chemin)) < 0) {
00126 MESSAGE("Erreur à la création du datagroup : ");
00127 SSCRUTE(chemin);
00128 goto ERROR;
00129 }
00130 }
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141 if (numero == 0) {
00142 if ((famid = _MEDdatagroupCreer(root,FAMILLE_ZERO)) < 0) {
00143 MESSAGE("Erreur à la création du famille : ");
00144 SSCRUTE(famille);
00145 goto ERROR;
00146 }
00147 } else {
00148
00149
00150
00151 NOFINALBLANK(famille,ERROR);
00152 if ((famid = _MEDdatagroupCreer(root,famille)) < 0) {
00153 MESSAGE("Erreur à la création du famille : ");
00154 SSCRUTE(famille);
00155 goto ERROR;
00156 }
00157 }
00158
00159
00160
00161
00162 if ((ret = _MEDattrEntierEcrire(famid,MED_NOM_NUM,&numero)) < 0) {
00163 MESSAGE("Erreur à l'écriture du numéro de famille : ");
00164 ISCRUTE(numero);
00165 goto ERROR;
00166 }
00167
00168
00169
00170
00171
00172 if (n_groupe > 0) {
00173
00174
00175
00176
00177 if ((datagroup = _MEDdatagroupCreer(famid,MED_NOM_GRO)) < 0) {
00178 MESSAGE("Erreur à la création du datagroup : ");
00179 SSCRUTE(MED_NOM_GRO);
00180 goto ERROR;
00181 }
00182
00183
00184
00185 if ((ret = _MEDattrEntierEcrire(datagroup,MED_NOM_NBR,&n_groupe)) < 0) {
00186 MESSAGE("Erreur à l'écriture du nombre de groupe : ");
00187 ISCRUTE(n_groupe);
00188 goto ERROR;
00189 }
00190
00191
00192
00193 dimd[0] = n_groupe*MED_TAILLE_LNOM+1;
00194 if ((ret = _MEDdatasetStringEcrire(datagroup,MED_NOM_NOM,dimd,groupe))<0) {
00195 MESSAGE("Erreur à l'écriture des noms des groupes : ");
00196 SSCRUTE(groupe);
00197 goto ERROR;
00198 }
00199
00200
00201
00202 if ((ret = _MEDdatagroupFermer(datagroup)) < 0) {
00203 MESSAGE("Impossible de fermer le datagroup : ");
00204 ISCRUTE_int(datagroup);
00205 goto ERROR;
00206 }
00207
00208 }
00209
00210
00211
00212
00213
00214
00215 if (n_attr > 0) {
00216
00217 if ((datagroup = _MEDdatagroupCreer(famid,MED_NOM_ATT)) < 0) {
00218 MESSAGE("Erreur à la création du datagroup : ");
00219 SSCRUTE(MED_NOM_ATT);
00220 goto ERROR;
00221 }
00222
00223
00224
00225 if ((ret = _MEDattrEntierEcrire(datagroup,MED_NOM_NBR,&n_attr)) < 0) {
00226 MESSAGE("Erreur à l'écriture du nombre d'attributs : ");
00227 ISCRUTE(n_attr);
00228 goto ERROR;
00229 }
00230
00231
00232
00233 dimd[0] = n_attr;
00234 #if defined(HAVE_F77INT64)
00235 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,
00236 (unsigned char *)attr_ident)) < 0) {
00237 MESSAGE("Erreur à l'écriture du dataset : ");
00238 SSCRUTE(MED_NOM_IDE);
00239 goto ERROR;
00240 }
00241 #else
00242 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,
00243 (unsigned char *)attr_ident)) < 0) {
00244 MESSAGE("Erreur à l'écriture du dataset : ");
00245 SSCRUTE(MED_NOM_IDE);
00246 goto ERROR;
00247 }
00248 #endif
00249
00250
00251
00252 dimd[0] = n_attr;
00253 #if defined(HAVE_F77INT64)
00254 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,
00255 (unsigned char*)attr_val)) < 0) {
00256 MESSAGE("Erreur à l'écriture du dataset : ");
00257 SSCRUTE(MED_NOM_VAL);
00258 goto ERROR;
00259 }
00260 #else
00261 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,
00262 (unsigned char*)attr_val)) < 0) {
00263 MESSAGE("Erreur à l'écriture du dataset : ");
00264 SSCRUTE(MED_NOM_VAL);
00265 goto ERROR;
00266 }
00267 #endif
00268
00269
00270
00271 dimd[0] = n_attr*MED_TAILLE_DESC+1;
00272 if ((ret = _MEDdatasetStringEcrire(datagroup,MED_NOM_DES,dimd,attr_desc)) < 0) {
00273 MESSAGE("Erreur à l'écriture du dataset : ");
00274 SSCRUTE(MED_NOM_DES);
00275 goto ERROR;
00276 }
00277
00278
00279
00280 if ((ret = _MEDdatagroupFermer(datagroup)) < 0) {
00281 MESSAGE("Impossible de fermer le datagroup : ");
00282 ISCRUTE_int(datagroup);
00283 goto ERROR;
00284 }
00285 }
00286
00287
00288
00289
00290
00291 ret=0;
00292 ERROR:
00293 if (famid>0) if (_MEDdatagroupFermer(famid) < 0) {
00294 MESSAGE("Impossible de fermer le datagroup : ");
00295 ISCRUTE_id(famid);ret = -1;
00296 }
00297
00298 if (root>0) if (_MEDdatagroupFermer(root) < 0) {
00299 MESSAGE("Impossible de fermer le datagroup : ");
00300 ISCRUTE_id(root); ret = -1;
00301 }
00302
00303 va_end(params);
00304 *fret = ret;
00305 return;
00306 }