00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
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
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
00057
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
00068 _MEDgetComputationStepName(MED_SORT_DTIT,numdt,numit,_cpstname);
00069 strcpy( _cpstpath, _parampath);
00070 strcat( _cpstpath, "/");
00071 strcat( _cpstpath, _cpstname);
00072
00073
00074
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 }