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 }