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 
00038 med_err
00039 MEDparameterValueWr(const med_idt              fid,
00040                     const char*  const         paramname,
00041                     const med_int              numdt,
00042                     const med_int              numit,
00043                     const med_float            dt,
00044                     const unsigned char* const value)
00045 {
00046   med_err _ret = -1;
00047   med_idt _paramidt = 0;
00048   med_idt _cpstidt = 0;
00049   char _parampath [MED_TAILLE_NUM_DATA+MED_NAME_SIZE+1] = "";
00050   char _cpstpath[MED_TAILLE_SUP_MAA+MED_NAME_SIZE+1+2*MED_MAX_PARA+1+1]="";
00051   char _cpstname [2*MED_MAX_PARA+1]="";
00052   med_access_mode       _MED_ACCESS_MODE;
00053   med_int _intparamtype = 0;
00054   med_parameter_type _paramtype;
00055 
00056   _MEDmodeErreurVerrouiller();
00057  if (_MEDcheckVersion30(fid) < 0) goto ERROR;
00058 
00059   
00060   if ( (_MED_ACCESS_MODE = _MEDmodeAcces(fid) ) == MED_ACC_UNDEF ) {
00061     MED_ERR_(_ret,MED_ERR_UNRECOGNIZED,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG);
00062     goto ERROR;
00063   }
00064   if ( _MED_ACCESS_MODE == MED_ACC_RDONLY) {
00065     MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG);
00066     ISCRUTE_int(_MED_ACCESS_MODE);
00067     goto ERROR;
00068   }
00069 
00070   
00071 
00072   NOFINALBLANK(paramname,ERROR);
00073   strcpy(_parampath, MED_NUM_DATA);
00074   strcat(_parampath, paramname);
00075   if ((_paramidt = _MEDdatagroupOuvrir(fid,_parampath)) < 0) {
00076     MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,MED_ERR_PARAM_MSG);
00077     SSCRUTE(paramname);SSCRUTE(_parampath); goto ERROR;
00078   }
00079 
00080   
00081   _MEDgetComputationStepName(MED_SORT_DTIT,numdt,numit,_cpstname);
00082   strcpy( _cpstpath, _parampath);
00083   strcat( _cpstpath, "/");
00084   strcat( _cpstpath, _cpstname);
00085 
00086   
00087   if ((_cpstidt = _MEDdatagroupOuvrir(_paramidt, _cpstname)) < 0 )
00088     if ((_cpstidt = _MEDdatagroupCreer(_paramidt,_cpstname)) < 0 ) {
00089       MED_ERR_(_ret, MED_ERR_EXIST, MED_ERR_COMPUTINGSTEP, _cpstname);
00090       SSCRUTE(paramname);goto ERROR;
00091     }
00092 
00093   
00094   if ( _MEDattributeIntWr(_cpstidt,MED_NOM_NDT,&numdt) < 0) {
00095     MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_PARAM_MSG);
00096     SSCRUTE(paramname);SSCRUTE(_cpstname);SSCRUTE(MED_NOM_NDT);
00097     ISCRUTE(numdt);goto ERROR;
00098   }
00099   
00100   if ( _MEDattrFloatEcrire(_cpstidt,MED_NOM_PDT,&dt) < 0) {
00101     MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_PARAM_MSG);
00102     SSCRUTE(paramname);SSCRUTE(_cpstname);SSCRUTE(MED_NOM_PDT);
00103     RSCRUTE(dt);goto ERROR;
00104   }
00105   
00106   if ( _MEDattributeIntWr(_cpstidt,MED_NOM_NOR,&numit) < 0) {
00107     MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_PARAM_MSG);
00108     SSCRUTE(paramname);SSCRUTE(_cpstname);SSCRUTE(MED_NOM_NOR);
00109     ISCRUTE(numit); goto ERROR;
00110   }
00111 
00112   
00113   if ( _MEDattrEntierLire(_paramidt,MED_NOM_TYP,&_intparamtype) < 0) {
00114     MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_PARAM_MSG);
00115     SSCRUTE(paramname);SSCRUTE(MED_NOM_TYP);
00116     goto ERROR;
00117   }
00118   _paramtype = (med_field_type) (_intparamtype);
00119   if (_paramtype == MED_FLOAT64)
00120     if (_MEDattrFloatEcrire(_cpstidt, MED_NOM_VAL, value) < 0) {
00121       MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_PARAM_MSG);
00122       SSCRUTE(paramname);SSCRUTE(MED_NOM_VAL);
00123     }
00124   if (_paramtype != MED_FLOAT64)
00125     if (_MEDattributeIntWr(_cpstidt, MED_NOM_VAL, value) < 0) {
00126       MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_PARAM_MSG);
00127       SSCRUTE(paramname);SSCRUTE(MED_NOM_VAL);
00128     }
00129 
00130   _ret = 0;
00131  ERROR:
00132 
00133   
00134 
00135   if (_cpstidt > 0)
00136     if (_MEDdatagroupFermer(_cpstidt) < 0) {
00137       MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_cpstname);
00138       ISCRUTE_id(_cpstidt);
00139   }
00140 
00141   if (_paramidt > 0)
00142     if (_MEDdatagroupFermer(_paramidt) < 0) {
00143       MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_parampath);
00144       ISCRUTE_id(_paramidt);
00145     }
00146 
00147   return _ret;
00148 }