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 _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
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 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
00075
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 }