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 }