# MEDjointCr232.c

Aller à la documentation de ce fichier.

    00001 /*  This file is part of MED.
    00002  *
    00003  *  COPYRIGHT (C) 1999 - 2011  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 MEDjointCr232(int dummy,...) {
    00028
    00029
    00030   med_idt   fid      ;
    00031   char *    maa_lcl  ;
    00032   char *    jn       ;
    00033   char *    desc     ;
    00034   med_int   dom      ;
    00035   char *    maa_dist ;
    00036   med_err * fret     ;
    00037
    00038   med_idt root=0,jntid=0;
    00039   med_err ret=-1;
    00040   char chemin[MED_TAILLE_MAA+MED_TAILLE_JNT+MED_TAILLE_NOM+1];
    00041   char tmp[MED_TAILLE_JNT+1];
    00042   med_int nbc=0;
    00043   med_mode_acces MED_MODE_ACCES;
    00044
    00045   va_list params;
    00046   va_start(params,dummy);
    00047
    00048   fid      = va_arg(params,med_idt);
    00049   maa_lcl  = va_arg(params,char *);
    00050   jn       = va_arg(params,char *);
    00051   desc     = va_arg(params,char *);
    00052   dom      = va_arg(params,med_int);
    00053   maa_dist = va_arg(params,char*);
    00054   fret     = va_arg(params,med_err *);
    00055
    00056   /*
    00057    * On inhibe le gestionnaire d'erreur
    00058    */
    00059   _MEDmodeErreurVerrouiller();
    00060 if (MEDcheckVersion(fid) < 0) {*fret=-1;return;}
    00061
    00062
    00063   if ( (MED_MODE_ACCES = _MEDmodeAcces(fid) ) == MED_UNDEF_MODE_ACCES ) {
    00064     MESSAGE("Impossible de déterminer le mode d'acces au fichier.");
    00065     goto ERROR;
    00066   }
    00067
    00068   if ( MED_MODE_ACCES == MED_LECTURE ) {
    00069     MESSAGE("Impossible de créer un joint en mode MED_LECTURE.");
    00070     goto ERROR;
    00071   };
    00072
    00073   /*
    00074    * Si le Data Group "JNT" n'existe pas, on le cree
    00075    */
    00076   NOFINALBLANK(maa_lcl,ERROR);
    00077   strcpy(chemin,MED_MAA);
    00078   strcat(chemin,maa_lcl);
    00079   strncpy(tmp,MED_JNT,MED_TAILLE_JNT-1);
    00080   tmp[MED_TAILLE_JNT-1] = '\0';
    00081   strcat(chemin,tmp);
    00082   if ((root = _MEDdatagroupOuvrir(fid,chemin)) < 0)
    00083     if ((root = _MEDdatagroupCreer(fid,chemin)) < 0) {
    00084       MESSAGE("Erreur à la création du datagroup : ");
    00085       SSCRUTE(chemin);
    00086       goto ERROR;
    00087     }
    00088
    00089   /*
    00090    * Si un joint du meme nom existe => erreur
    00091    * Sinon on le cree
    00092    */
    00093   NOFINALBLANK(jn,ERROR);
    00094   if ((jntid = _MEDdatagroupCreer(root,jn)) < 0) {
    00095     MESSAGE("Erreur à la création du joint : ");
    00096     SSCRUTE(jn);
    00097     goto ERROR;
    00098   }
    00099
    00100   /*
    00101    * L'attribut "DES"
    00102    */
    00103   if ((ret = _MEDattrStringEcrire(jntid,MED_NOM_DES,MED_TAILLE_DESC,desc)) < 0) {
    00104     MESSAGE("Erreur à l'écriture de la description du joint : ");
    00105     SSCRUTE(desc);
    00106     goto ERROR;
    00107   }
    00108
    00109   /*
    00110    * L'attribut "MAI"
    00111    */
    00112   if ((ret = _MEDattrStringEcrire(jntid,MED_NOM_MAI,MED_TAILLE_NOM,maa_dist)) < 0) {
    00113     MESSAGE("Erreur à l'écriture du nom du maillage distant : ");
    00114     SSCRUTE(maa_dist);
    00115     goto ERROR;
    00116   }
    00117
    00118   /*
    00119    * L'attribut "DOM"
    00120    */
    00121   if ((ret = _MEDattrEntierEcrire(jntid,MED_NOM_DOM,&dom)) < 0) {
    00122     MESSAGE("Erreur à l'écriture du domaine : ");
    00123     ISCRUTE(dom);
    00124     goto ERROR;
    00125   }
    00126
    00127   /*
    00128    * On ferme tout
    00129    */
    00130   ret=0;
    00131  ERROR:
    00132
    00133   if (jntid>0)     if (_MEDdatagroupFermer(jntid) < 0) {
    00134     MESSAGE("Impossible de fermer le datagroup : ");
    00135     ISCRUTE_id(jntid);ret = -1;
    00136   }
    00137
    00138   if (root>0)     if (_MEDdatagroupFermer(root) < 0) {
    00139     MESSAGE("Impossible de fermer le datagroup : ");
    00140     ISCRUTE_id(root); ret = -1;
    00141   }
    00142
    00143   va_end(params);
    00144   *fret = ret;
    00145   return;
    00146 }
    00147
    00148
    00149