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

Généré le Mon May 16 17:10:22 2011 pour MED fichier par  doxygen 1.6.1