MEDfamCr232.c

Aller à la documentation de ce fichier.
00001 /*  This file is part of MED.
00002  *
00003  *  COPYRIGHT (C) 1999 - 2015  EDF R&D, CEA/DEN
00004  *  MED is free software: you can redistribute it and/or modify
00005  *  it under the terms of the GNU Lesser General Public License as published by
00006  *  the Free Software Foundation, either version 3 of the License, or
00007  *  (at your option) any later version.
00008  *
00009  *  MED is distributed in the hope that it will be useful,
00010  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012  *  GNU Lesser General Public License for more details.
00013  *
00014  *  You should have received a copy of the GNU Lesser General Public License
00015  *  along with MED.  If not, see <http://www.gnu.org/licenses/>.
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    * On inhibe le gestionnaire d'erreur HDF 5
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    * Si le Data Group FAS n'existe pas, on le cree
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    * Le lieu de stockage varie selon le signe du "numero"
00102    * de famille
00103    * = 0 => FAMILLE NEUTRE
00104    * > 0 => FAMILLE DE NOEUD 
00105    * < 0 => FAMILLE DE MAILLE/FACE/ARETE
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    * Si le Data Group de meme nom que famille existe => erreur
00135    * Sinon on le cree
00136    */
00137 
00138   /*
00139    * POUR LA FAMILLE DE NUMERO 0, ON FORCE LE NOM 
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      * Création de la famille
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    * L'attribut NUM
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    * Le Data Group "GRO"
00171    */
00172   if (n_groupe > 0)  {
00173 
00174     /*
00175      * On cree le Data Group 
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      * L'attribut "NBR"
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      * Data Set des noms des groupes "NOM"
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      * On ferme le Data Group
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    * Le Data Group "ATT"
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      * L'attribut "NBR"
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      * Le Data Set "IDE"
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      * Le Data Set "VAL"
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      * Le Data Set "DES"
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      * On ferme le Data Group
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    * On ferme tout
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 }

Généré le Thu Oct 8 14:26:16 2015 pour MED fichier par  doxygen 1.6.1