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
00023 #include <string.h>
00024 #include <stdlib.h>
00025
00037 med_err
00038 MEDparameterCr(const med_idt fid,
00039 const char * const paramname,
00040 const med_parameter_type paramtype,
00041 const char* const description,
00042 const char * const dtunit
00043 )
00044 {
00045 med_err _ret=-1;
00046 med_idt _root=0,_datagroup1=0;
00047 med_access_mode _MED_ACCESS_MODE;
00048 char _datagroupname1 [MED_NAME_SIZE+1]="";
00049 med_int _paramtype = (med_int) paramtype;
00050
00051
00052 _MEDmodeErreurVerrouiller();
00053 if (_MEDcheckVersion30(fid) < 0) goto ERROR;
00054 if ( (_MED_ACCESS_MODE = _MEDmodeAcces(fid) ) == MED_ACC_UNDEF ) {
00055 MED_ERR_(_ret,MED_ERR_UNRECOGNIZED,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG);
00056 goto ERROR;
00057 }
00058
00059 if ( _MED_ACCESS_MODE == MED_ACC_RDONLY) {
00060 MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG);
00061 ISCRUTE_int(_MED_ACCESS_MODE);
00062 goto ERROR;
00063 }
00064
00065
00066
00067
00068 if ((_root = _MEDdatagroupOuvrir(fid,MED_NUM_DATA)) < 0)
00069 if ((_root = _MEDdatagroupCreer(fid,MED_NUM_DATA)) < 0) {
00070 MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,MED_NUM_DATA);
00071 goto ERROR;
00072 }
00073 NOFINALBLANK(paramname,ERROR);
00074
00075
00076
00077
00078 if ((_datagroup1 = _MEDdatagroupOuvrir(_root,paramname)) < 0)
00079 if ((_datagroup1 = _MEDdatagroupCreer(_root,paramname)) < 0 ) {
00080 MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,MED_NUM_DATA);
00081 SSCRUTE(paramname);goto ERROR;
00082 }
00083
00084
00085
00086
00087 if ( _MEDattributeIntWr(_datagroup1,MED_NOM_TYP,&_paramtype) < 0) {
00088 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_PARAM_MSG);
00089 SSCRUTE(paramname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_TYP);
00090 ISCRUTE(_paramtype);goto ERROR;
00091 }
00092 if ( _MEDattributeStringWr(_datagroup1,MED_NOM_DES,MED_COMMENT_SIZE,description) < 0) {
00093 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_PARAM_MSG);
00094 SSCRUTE(paramname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_DES);
00095 SSCRUTE(description);goto ERROR;
00096 }
00097 if ( _MEDattributeStringWr(_datagroup1,MED_NOM_UNT,MED_SNAME_SIZE,dtunit) < 0) {
00098 MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_PARAM_MSG);
00099 SSCRUTE(paramname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_UNT);
00100 SSCRUTE(dtunit);goto ERROR;
00101 }
00102
00103 _ret = 0;
00104 ERROR :
00105
00106 if (_datagroup1>0) if (_MEDdatagroupFermer(_datagroup1) < 0) {
00107 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_datagroupname1);
00108 ISCRUTE_id(_datagroup1);
00109 }
00110
00111 if (_root>0) if (_MEDdatagroupFermer(_root) < 0) {
00112 MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,MED_NUM_DATA);
00113 ISCRUTE_id(_root);
00114 }
00115
00116 return _ret;
00117 }