MEDfamCr231.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 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    * 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   /*  BUG NON CORRIGE en 2.3.1 à cause
00087       des noms de familles crées en F77
00088       NOFINALBLANK(maa,ERROR);*/
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    * Le lieu de stockage varie selon le signe du "numero"
00104    * de famille
00105    * = 0 => FAMILLE NEUTRE
00106    * > 0 => FAMILLE DE NOEUD 
00107    * < 0 => FAMILLE DE MAILLE/FACE/ARETE
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    * Si le Data Group de meme nom que famille existe => erreur
00137    * Sinon on le cree
00138    */
00139 
00140   /*
00141    * POUR LA FAMILLE DE NUMERO 0, ON FORCE LE NOM 
00142    */
00143   if (numero == 0)
00144     strcpy(famille,FAMILLE_ZERO);
00145   
00146   /*
00147    * Création de la famille
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    * L'attribut NUM
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    * Le Data Group "GRO"
00168    */
00169   if (n_groupe > 0)  {
00170 
00171     /*
00172      * On cree le Data Group 
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      * L'attribut "NBR"
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      * Data Set des noms des groupes "NOM"
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      * On ferme le Data Group
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    * Le Data Group "ATT"
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      * L'attribut "NBR"
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      * Le Data Set "IDE"
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      * Le Data Set "VAL"
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      * Le Data Set "DES"
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      * On ferme le Data Group
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    * On ferme tout
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 }

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