_MEDparameterValueRd236.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 _MEDparameterValueRd236(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   sprintf(_cpstname,"%*li%*li",MED_MAX_PARA,(long ) numdt,MED_MAX_PARA,(long ) numit);
00069 
00070   strcpy( _cpstpath, _parampath);
00071   strcat( _cpstpath, "/");
00072   strcat( _cpstpath, _cpstname);
00073 
00074   /* On ouvre le groupe de la sequence de calcul et on lit la
00075      valeur du paramètre */
00076   if ((_cpstidt = _MEDdatagroupOuvrir(_paramidt, _cpstname)) < 0 )  {
00077       MED_ERR_(_ret, MED_ERR_OPEN, MED_ERR_COMPUTINGSTEP, _cpstname);
00078       SSCRUTE(paramname);goto ERROR;
00079   }
00080   if ( _MEDattrEntierLire(_paramidt,MED_NOM_TYP,&_intparamtype) < 0) {
00081     MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_PARAM_MSG);
00082     SSCRUTE(paramname);SSCRUTE(MED_NOM_TYP);
00083     goto ERROR;
00084   }
00085   _paramtype = (med_field_type) (_intparamtype);
00086   if (_paramtype == MED_FLOAT64)
00087     if (_MEDattrFloatLire(_cpstidt, MED_NOM_VAL, value) < 0) {
00088       MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_PARAM_MSG);
00089       SSCRUTE(paramname);SSCRUTE(MED_NOM_VAL);
00090     }
00091   if (_paramtype != MED_FLOAT64)
00092     if (_MEDattrEntierLire(_cpstidt, MED_NOM_VAL, value) < 0) {
00093       MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_PARAM_MSG);
00094       SSCRUTE(paramname);SSCRUTE(MED_NOM_VAL);
00095     }
00096 
00097   _ret = 0;
00098  ERROR :
00099 
00100   if (_cpstidt > 0)
00101     if (_MEDdatagroupFermer(_cpstidt) < 0) {
00102       MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_cpstname);
00103       ISCRUTE_id(_cpstidt);
00104   }
00105 
00106   if (_paramidt > 0)
00107     if (_MEDdatagroupFermer(_paramidt) < 0) {
00108       MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_parampath);
00109       ISCRUTE_id(_paramidt);
00110     }
00111 
00112   va_end(params);
00113   *fret = _ret;
00114   return;
00115 }

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