# _MEDparameterValueRd30.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 #include <string.h>
    00023 #include <stdlib.h>
    00024
    00025 void _MEDparameterValueRd30(int dummy, ...) {
    00026
    00027   med_err _ret=-1;
    00028
    00029   med_idt _paramidt = 0;
    00030   med_idt _cpstidt = 0;
    00031   char _parampath [MED_TAILLE_NUM_DATA+MED_NAME_SIZE+1] = "";
    00032   char _cpstpath[MED_TAILLE_SUP_MAA+MED_NAME_SIZE+1+2*MED_MAX_PARA+1+1]="";
    00033   char _cpstname [2*MED_MAX_PARA+1]="";
    00034   med_access_mode       _MED_ACCESS_MODE;
    00035   med_int _intparamtype = 0;
    00036   med_parameter_type _paramtype;
    00037
    00038   MED_VARGS_DECL(const, med_idt              , , fid       );
    00039   MED_VARGS_DECL(const, char*  , const         , paramname );
    00040   MED_VARGS_DECL(const, med_int              , , numdt     );
    00041   MED_VARGS_DECL(const, med_int              , , numit     );
    00042   MED_VARGS_DECL(,unsigned char*, const        ,value      );
    00043   MED_VARGS_DECL(, med_err *                  ,, fret      );
    00044
    00045   va_list params;
    00046   va_start(params,dummy);
    00047
    00048   MED_VARGS_DEF(const, med_idt              , , fid       );
    00049   MED_VARGS_DEF(const, char*  , const         , paramname );
    00050   MED_VARGS_DEF(const, med_int              , , numdt     );
    00051   MED_VARGS_DEF(const, med_int              , , numit     );
    00052   MED_VARGS_DEF(,unsigned char*, const        ,value      );
    00053   MED_VARGS_DEF(, med_err *                  ,, fret      );
    00054
    00055
    00056   _MEDmodeErreurVerrouiller();
    00057
    00058   /* Verification du mode d'acces aux données */
    00059   if ( (_MED_ACCESS_MODE = _MEDmodeAcces(fid) ) == MED_ACC_UNDEF ) {
    00060     MED_ERR_(_ret,MED_ERR_UNRECOGNIZED,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG);
    00061     goto ERROR;
    00062   }
    00063
    00064   /* Si le group HDF correspondant au parametre n'existe pas => erreur
    00065      Sinon on l'ouvre */
    00066   NOFINALBLANK(paramname,ERROR);
    00067   strcpy(_parampath, MED_NUM_DATA);
    00068   strcat(_parampath, paramname);
    00069   if ((_paramidt = _MEDdatagroupOuvrir(fid,_parampath)) < 0) {
    00070     MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,MED_ERR_PARAM_MSG);
    00071     SSCRUTE(paramname);SSCRUTE(_parampath); goto ERROR;
    00072   }
    00073
    00074
    00075   /* On construit le nom du datagroup du pas de temps */
    00076   _MEDgetComputationStepName(MED_SORT_DTIT,numdt,numit,_cpstname);
    00077   strcpy( _cpstpath, _parampath);
    00078   strcat( _cpstpath, "/");
    00079   strcat( _cpstpath, _cpstname);
    00080
    00081   /* On ouvre le groupe de la sequence de calcul et on lit la
    00082      valeur du paramètre */
    00083   if ((_cpstidt = _MEDdatagroupOuvrir(_paramidt, _cpstname)) < 0 )  {
    00084       MED_ERR_(_ret, MED_ERR_OPEN, MED_ERR_COMPUTINGSTEP, _cpstname);
    00085       SSCRUTE(paramname);goto ERROR;
    00086   }
    00087   if ( _MEDattrEntierLire(_paramidt,MED_NOM_TYP,&_intparamtype) < 0) {
    00088     MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_PARAM_MSG);
    00089     SSCRUTE(paramname);SSCRUTE(MED_NOM_TYP);
    00090     goto ERROR;
    00091   }
    00092   _paramtype = (med_field_type) (_intparamtype);
    00093   if (_paramtype == MED_FLOAT64)
    00094     if (_MEDattrFloatLire(_cpstidt, MED_NOM_VAL, value) < 0) {
    00095       MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_PARAM_MSG);
    00096       SSCRUTE(paramname);SSCRUTE(MED_NOM_VAL);
    00097     }
    00098   if (_paramtype != MED_FLOAT64)
    00099     if (_MEDattrEntierLire(_cpstidt, MED_NOM_VAL, value) < 0) {
    00100       MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_PARAM_MSG);
    00101       SSCRUTE(paramname);SSCRUTE(MED_NOM_VAL);
    00102     }
    00103
    00104   _ret = 0;
    00105  ERROR :
    00106
    00107   if (_cpstidt > 0)
    00108     if (_MEDdatagroupFermer(_cpstidt) < 0) {
    00109       MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_cpstname);
    00110       ISCRUTE_id(_cpstidt);
    00111   }
    00112
    00113   if (_paramidt > 0)
    00114     if (_MEDdatagroupFermer(_paramidt) < 0) {
    00115       MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_parampath);
    00116       ISCRUTE_id(_paramidt);
    00117     }
    00118
    00119   va_end(params);
    00120   *fret = _ret;
    00121   return;
    00122 }