Back to index

salome-med  6.5.0
MEDMEM_MEDMEMprofilEcr.cxx
Go to the documentation of this file.
00001 // Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
00002 //
00003 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
00004 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
00005 //
00006 // This library is free software; you can redistribute it and/or
00007 // modify it under the terms of the GNU Lesser General Public
00008 // License as published by the Free Software Foundation; either
00009 // version 2.1 of the License.
00010 //
00011 // This library is distributed in the hope that it will be useful,
00012 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014 // Lesser General Public License for more details.
00015 //
00016 // You should have received a copy of the GNU Lesser General Public
00017 // License along with this library; if not, write to the Free Software
00018 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
00019 //
00020 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
00021 //
00022 
00023 #include "MEDMEM_MEDMEMprofilEcr.hxx"
00024 /*
00025  * En attendant une correction de la gestion du mode d'accès au fichier dans MEDfichier
00026  * on intègre la correction ici.
00027  */
00028 
00029 namespace med_2_3 {
00030   extern "C" {
00031 
00032 # define ICI                    {                       \
00033       fflush(stdout);                                                   \
00034       fprintf(stderr, "%s [%d] : " , __FILE__ , __LINE__ ) ;            \
00035       fflush(stderr) ;                                                  \
00036     }
00037 
00038 # define ISCRUTE_MED(entier)        {           \
00039       ICI ;                                                             \
00040       fprintf(stderr,"%s = %d\n",#entier,entier) ;                      \
00041       fflush(stderr) ;                                                  \
00042     }
00043 
00044 # define SSCRUTE_MED(chaine)        {           \
00045       ICI ;                                                             \
00046       fprintf(stderr,"%s = \"%s\"\n",#chaine,chaine) ;                  \
00047       fflush(stderr) ;                                                  \
00048     }
00049 # define MESSAGE_MED(chaine)        {           \
00050       ICI ;                                                             \
00051       fprintf(stderr,"%s\n",chaine) ;                                   \
00052       fflush(stderr) ;                                                  \
00053     }
00054 
00055     extern void _MEDmodeErreurVerrouiller(void);
00056 
00057 #include <med.h>
00058 #include <med_outils.h>
00059 
00060 #include <string.h>
00061 #include <stdlib.h>
00062 
00063     med_err
00064     MEDMEMprofilEcr(med_idt fid,med_int *pflval,med_int n,char *profilname)
00065     {
00066       med_idt gid, chid;
00067       med_size dimd[1];
00068       med_err ret;
00069       char chemin[MED_TAILLE_PROFILS+1];
00070 
00071       /*
00072        * On inhibe le gestionnaire d'erreur HDF 5
00073        */
00074       _MEDmodeErreurVerrouiller();
00075 
00076       /*
00077        * Si le groupe "PROFILS" n'existe pas, on le cree
00078        */
00079       strncpy(chemin,MED_PROFILS,MED_TAILLE_PROFILS-1);
00080       chemin[MED_TAILLE_PROFILS-1] = '\0';
00081       if ((gid = _MEDdatagroupOuvrir(fid,chemin)) < 0)
00082         if ((gid = _MEDdatagroupCreer(fid,chemin)) < 0) {
00083           MESSAGE_MED("Impossible de creer le groupe MED_PROFILS : ");
00084           SSCRUTE_MED(chemin); goto ERROR;
00085         }
00086 
00087       /*
00088        * Si le groupe "profilname" n'existe pas, on le cree
00089        * Sinon => erreur
00090        */
00091       if ((chid = _MEDdatagroupOuvrir(gid,profilname)) >= 0) {
00092         if ( false )//MED_MODE_ACCES != MED_LECTURE_ECRITURE )
00093   {
00094           MESSAGE_MED("Le profil existe déjà : ");
00095           SSCRUTE_MED(profilname); goto ERROR;
00096         }
00097       } else
00098         if ((chid = _MEDdatagroupCreer(gid,profilname)) < 0)
00099           goto ERROR;
00100 
00101       /*
00102        * On stocke "n" sous forme d'attribut
00103        */
00104       if ((ret = _MEDattrEntierEcrire(chid,MED_NOM_NBR,&n)) < 0) {
00105         MESSAGE_MED("Erreur à l'écriture de l'attribut MED_NOM_NBR : ");
00106         ISCRUTE_MED(n); goto ERROR;
00107       };
00108 
00109       /*
00110        * On stocke le profil dans un dataset
00111        */
00112       dimd[0] = n;
00113 #if defined(F77INT64)
00114       ret =  _MEDdatasetNumEcrire(chid,MED_NOM_PFL,MED_INT64,MED_NO_INTERLACE,MED_DIM1,MED_ALL,MED_NOPF,MED_NO_PFLMOD,0,MED_NOPG,dimd,
00115                                   (unsigned char*) pflval);
00116 #else
00117       ret =  _MEDdatasetNumEcrire(chid,MED_NOM_PFL,MED_INT32,MED_NO_INTERLACE,MED_DIM1,MED_ALL,MED_NOPF,MED_NO_PFLMOD,0,MED_NOPG,dimd,
00118                                   (unsigned char*) pflval);
00119 #endif
00120       if (ret < 0 ) {
00121         MESSAGE_MED("Impossible d'ecrire le dataset pflval de taille  : ");
00122         ISCRUTE_MED(n); goto ERROR;
00123       }
00124 
00125       ret = 0;
00126     ERROR:
00127       /*
00128        * On ferme tout
00129        */
00130       if (chid>0)     if (_MEDdatagroupFermer(chid) < 0) {
00131         MESSAGE_MED("Impossible de fermer le datagroup : ");
00132         ISCRUTE_MED(chid); ret = -1;
00133       }
00134 
00135       if (gid>0)     if (_MEDdatagroupFermer(gid) < 0) {
00136         MESSAGE_MED("Impossible de fermer le datagroup : ");
00137         ISCRUTE_MED(gid); ret = -1;
00138       }
00139 
00140       return ret;
00141     }
00142 
00143 #undef MESSAGE_MED
00144 #undef SSCRUTE_MED
00145 #undef ISCRUTE_MED
00146 
00147   }
00148 }
00149 
00150 
00151 
00152