diff options
author | Elena Pourmal <epourmal@hdfgroup.org> | 2008-05-06 19:23:32 (GMT) |
---|---|---|
committer | Elena Pourmal <epourmal@hdfgroup.org> | 2008-05-06 19:23:32 (GMT) |
commit | 0bfb17bf00b9d4dae00e7f454c437ca98f2a5677 (patch) | |
tree | 1d4ef1dd28b642ee28d27fd5fc579c5a10714538 /fortran/src | |
parent | 464e4619f670006c2477583b7f9d7b0530b0a245 (diff) | |
download | hdf5-0bfb17bf00b9d4dae00e7f454c437ca98f2a5677.zip hdf5-0bfb17bf00b9d4dae00e7f454c437ca98f2a5677.tar.gz hdf5-0bfb17bf00b9d4dae00e7f454c437ca98f2a5677.tar.bz2 |
[svn-r14942] Maintenance: Merged new Fortran APIs and tests from trunk into hdf5_1_8 branch
(used svn merge -r 14505:14941 http://svn.hdfgorup.uiuc.edu/hdf5/trunk/fortran
command).
Updated MANIFEST
Disabled -O3 optimization for gcc 4.3 (long due check-in)
Platforms tested: kagiso with PGI compilers, smirom with g95 and v16 option, linew
Diffstat (limited to 'fortran/src')
30 files changed, 11142 insertions, 1381 deletions
diff --git a/fortran/src/H5Af.c b/fortran/src/H5Af.c index 0be225b..9818258 100644 --- a/fortran/src/H5Af.c +++ b/fortran/src/H5Af.c @@ -35,7 +35,7 @@ *---------------------------------------------------------------------------*/ int_f nh5acreate_c(hid_t_f *obj_id, _fcd name, size_t_f *namelen, hid_t_f *type_id, - hid_t_f *space_id, hid_t_f *crt_prp, hid_t_f *attr_id) + hid_t_f *space_id, hid_t_f *crt_prp, hid_t_f *aapl, hid_t_f *attr_id) { char *c_name = NULL; /* Buffer to hold C string */ int_f ret_value = 0; /* Return value */ @@ -49,7 +49,7 @@ nh5acreate_c(hid_t_f *obj_id, _fcd name, size_t_f *namelen, hid_t_f *type_id, /* * Call H5Acreate2 function. */ - if((*attr_id = (hid_t_f)H5Acreate2((hid_t)*obj_id, c_name, (hid_t)*type_id, (hid_t)*space_id, (hid_t)*crt_prp, H5P_DEFAULT)) < 0) + if((*attr_id = (hid_t_f)H5Acreate2((hid_t)*obj_id, c_name, (hid_t)*type_id, (hid_t)*space_id, (hid_t)*crt_prp, (hid_t)*aapl)) < 0) HGOTO_DONE(FAIL); done: @@ -959,7 +959,7 @@ done: * Name: h5aget_name_c * Purpose: Call H5Aget_name to get attribute's name * Inputs: attr_id - attribute identifier - * bufsize -size of the buffer + * bufsize - size of the buffer * Outputs: buf - buffer to hold the name * Returns: 0 on success, -1 on failure * Programmer: Elena Pourmal @@ -969,27 +969,801 @@ done: int_f nh5aget_name_c(hid_t_f *attr_id, size_t_f *bufsize, _fcd buf) { - char *c_buf=NULL; /* Buffer to hold C string */ + size_t c_bufsize; + char *c_buf=NULL; /* Buffer to hold C string */ + int_f ret_value=0; /* Return value */ + + c_bufsize = (size_t)*bufsize+1; + /* + * Allocate buffer to hold name of an attribute + */ + if ((c_buf = HDmalloc(c_bufsize)) == NULL) + HGOTO_DONE(FAIL); + + /* + * Call H5Aget_name function + */ + + if ((ret_value = (int_f)H5Aget_name((hid_t)*attr_id, c_bufsize, c_buf)) < 0) + HGOTO_DONE(FAIL); + + /* + * Convert C name to FORTRAN and place it in the given buffer + */ + HD5packFstring(c_buf, _fcdtocp(buf), c_bufsize-1); + +done: + if(c_buf) HDfree(c_buf); + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5aget_storage_size_c + * Purpose: Call H5Aget_storage_size + * Inputs: attr_id - identifier of an attribute + * Outputs: size - attributes storage requirements + * Returns: 0 on success, -1 on failure + * Programmer: M. S. Breitenfeld + * January, 2008 + * Modifications: N/A + *---------------------------------------------------------------------------*/ + +int_f +nh5aget_storage_size_c ( hid_t_f *attr_id, hsize_t_f *size) +{ + int_f ret_value=0; /* Return value */ + + if ((*size = (hsize_t_f)H5Aget_storage_size((hid_t)*attr_id)) < 0) + HGOTO_DONE(FAIL); + +done: + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5aget_create_plist_c + * Purpose: Call H5Aget_create_plist + * Inputs: attr_id - identifier of an attribute + * Outputs: creation_prop_id - Identifier for the attribute’s creation property + * Returns: 0 on success, -1 on failure + * Programmer: M. S. Breitenfeld + * January, 2008 + * Modifications: N/A + *---------------------------------------------------------------------------*/ + +int_f +nh5aget_create_plist_c ( hid_t_f *attr_id, hid_t_f *creation_prop_id) +{ int_f ret_value=0; /* Return value */ + if ((*creation_prop_id = (hid_t_f)H5Aget_create_plist((hid_t)*attr_id)) < 0) + HGOTO_DONE(FAIL); + +done: + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5arename_by_name_c + * Purpose: Calls H5Arename_by_name + * Inputs: loc_id - Object identifier + * obj_name - Name of object, relative to location, + * whose attribute is to be renamed + * obj_name_len - Object name length + * old_attr_name - Prior attribute name + * old_attr_name_len - Prior attribute name length + * new_attr_name - New attribute name + * new_attr_name_len - New attribute name length + * lapl_id - Link access property list identifier + * Outputs: N/A + * Returns: 0 on success, -1 on failure + * Programmer: M. S. Breitenfeld + * January, 2008 + * Modifications: N/A + *---------------------------------------------------------------------------*/ + +int_f +nh5arename_by_name_c( hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen, + _fcd old_attr_name, size_t_f *old_attr_namelen, + _fcd new_attr_name, size_t_f *new_attr_namelen, + hid_t_f *lapl_id ) +{ + char *c_obj_name = NULL; /* Buffer to hold C string */ + char *c_old_attr_name = NULL; /* Buffer to hold C string */ + char *c_new_attr_name = NULL; /* Buffer to hold C string */ + int_f ret_value=0; /* Return value */ /* - * Allocate buffer to hold name of an attribute + * Convert FORTRAN name to C name */ - if ((c_buf = HDmalloc((size_t)*bufsize +1)) == NULL) - HGOTO_DONE(FAIL); + if((c_obj_name = HD5f2cstring(obj_name, (size_t)*obj_namelen)) == NULL) + HGOTO_DONE(FAIL); + if((c_old_attr_name = HD5f2cstring(old_attr_name, (size_t)*old_attr_namelen)) == NULL) + HGOTO_DONE(FAIL); + if((c_new_attr_name = HD5f2cstring(new_attr_name, (size_t)*new_attr_namelen)) == NULL) + HGOTO_DONE(FAIL); + + if(H5Arename_by_name((hid_t)*loc_id,c_obj_name,c_old_attr_name,c_new_attr_name,(hid_t)*lapl_id) < 0) + HGOTO_DONE(FAIL); + +done: + if(c_obj_name) + HDfree(c_obj_name); + if(c_old_attr_name) + HDfree(c_old_attr_name); + if(c_new_attr_name) + HDfree(c_new_attr_name); + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5aopen_c + * Purpose: Call H5Aopen to open an attribute + * Inputs: obj_id - Identifer for object to which attribute is attached + * attr_name - Attribute access property list + * attr_namelen - size of attr_name + * aapl_id - Link access property list + * Outputs: attr_id - dataset identifier + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * January, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5aopen_c (hid_t_f *obj_id, _fcd attr_name, size_t_f *attr_namelen, hid_t_f *aapl_id, hid_t_f *attr_id) +{ + char *c_attr_name = NULL; /* Buffer to hold C string */ + int_f ret_value = 0; /* Return value */ /* - * Call H5Aget_name function + * Convert FORTRAN name to C name + */ + if((c_attr_name = HD5f2cstring(attr_name, (size_t)*attr_namelen)) == NULL) + HGOTO_DONE(FAIL); + /* + * Call H5Aopen function. */ - if ((ret_value = (int_f)H5Aget_name((hid_t)*attr_id, (size_t)*bufsize, c_buf)) < 0) - HGOTO_DONE(FAIL); + + if((*attr_id = (hid_t_f)H5Aopen((hid_t)*obj_id, c_attr_name, (hid_t)*aapl_id)) < 0) + HGOTO_DONE(FAIL); + +done: + if(c_attr_name) + HDfree(c_attr_name); + return ret_value; +} +/*---------------------------------------------------------------------------- + * Name: h5adelete_by_name_c + * Purpose: Call h5adelete_by_name to remove an attribute from a specified location + * Inputs: loc_id - identifer for object to which attribute is attached + * obj_name - object identifier + * obj_namelen - name length + * attr_name - name of the attribute + * attr_namelen - name length + * lapl_id - link access property list + * + * Outputs: N/A + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * January, 2008 + * Modifications: N/A + *---------------------------------------------------------------------------*/ +int_f +nh5adelete_by_name_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen, _fcd attr_name, size_t_f *attr_namelen, hid_t_f *lapl_id) +{ + char *c_obj_name = NULL; /* Buffer to hold C string */ + char *c_attr_name = NULL; /* Buffer to hold C string */ + int_f ret_value = 0; /* Return value */ + + /* + * Convert FORTRAN name to C name + */ + if((c_obj_name = HD5f2cstring(obj_name, (size_t)*obj_namelen)) == NULL) + HGOTO_DONE(FAIL); + if((c_attr_name = HD5f2cstring(attr_name, (size_t)*attr_namelen)) == NULL) + HGOTO_DONE(FAIL); + + /* + * Call H5Adelete_by_name function. + */ + if(H5Adelete_by_name((hid_t)*loc_id, c_obj_name, c_attr_name, (hid_t)*lapl_id) < 0) + HGOTO_DONE(FAIL); + +done: + if(c_attr_name) + HDfree(c_attr_name); + if(c_obj_name) + HDfree(c_obj_name); + return ret_value; +} +/*---------------------------------------------------------------------------- + * Name: h5adelete_by_idx_c + * Purpose: Call h5adelete_by_idx + * Inputs: loc_id - Location or object identifier; may be dataset or group + * obj_name - object identifier + * obj_namelen - name length + * attr_name - name of the attribute + * attr_namelen - name length + * lapl_id - link access property list + * + * Outputs: N/A + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * January, 2008 + * Modifications: N/A + *---------------------------------------------------------------------------*/ +int_f +nh5adelete_by_idx_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen, + int_f *idx_type, int_f *order, hsize_t_f *n, hid_t_f *lapl_id) +{ + char *c_obj_name = NULL; /* Buffer to hold C string */ + H5_index_t c_idx_type; + H5_iter_order_t c_order; + int_f ret_value = 0; /* Return value */ + + /* + * Convert FORTRAN name to C name + */ + if((c_obj_name = HD5f2cstring(obj_name, (size_t)*obj_namelen)) == NULL) + HGOTO_DONE(FAIL); + + c_idx_type = (H5_index_t)*idx_type; + c_order = (H5_iter_order_t)*order; + + /* + * Call H5Adelete_by_name function. + */ + + if(H5Adelete_by_idx((hid_t)*loc_id, c_obj_name, c_idx_type, c_order, (hsize_t)*n, (hid_t)*lapl_id) < 0) + HGOTO_DONE(FAIL); + + +done: + if(c_obj_name) + HDfree(c_obj_name); + return ret_value; +} +/*---------------------------------------------------------------------------- + * Name: h5aget_name_by_idx_c + * Purpose: Call h5aget_name_by_idx + * Inputs: + * + * loc_id - Identifer for object to which attribute is attached + * obj_name - Name of object, relative to location, + * from which attribute is to be removed *TEST* check NULL + * idx_type - Type of index; Possible values are: + * H5_INDEX_UNKNOWN - Unknown index type + * H5_INDEX_NAME - Index on names + * H5_INDEX_CRT_ORDER - Index on creation order + * H5_INDEX_N - Number of indices defined + * + * order - Order in which to iterate over index; Possible values are: + * H5_ITER_UNKNOWN - Unknown order + * H5_ITER_INC - Increasing order + * H5_ITER_DEC - Decreasing order + * H5_ITER_NATIVE - No particular order, whatever is fastest + * H5_ITER_N - Number of iteration orders + * + * n - Attribute’s position in index + * attr_id - Attribute identifier + * size - Buffer size ! *TEST* check for 0 value *CHECK* should this return the correct value + * + * lapl_id - Link access property list + * hdferr - Error code: + * Returns attribute name size, -1 if fail + * + * Outputs: name - Attribute name + * + * Returns: Size of buffer on success, -1 on failure + * Programmer: M.S. Breitenfeld + * January, 2008 + * Modifications: N/A + *---------------------------------------------------------------------------*/ +int_f +nh5aget_name_by_idx_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen, + int_f *idx_type, int_f *order, hsize_t_f *n, _fcd name, + size_t_f *size, hid_t_f *lapl_id) +{ + char *c_obj_name = NULL; /* Buffer to hold C string */ + H5_index_t c_idx_type; + H5_iter_order_t c_order; + int_f ret_value = -1; /* Return value */ + ssize_t c_size; + size_t c_buf_size; + char *c_buf =NULL; + /* + * Convert FORTRAN name to C name + */ + if((c_obj_name = HD5f2cstring(obj_name, (size_t)*obj_namelen)) == NULL) + HGOTO_DONE(FAIL); + + c_idx_type = (H5_index_t)*idx_type; + c_order = (H5_iter_order_t)*order; + + /* + * Allocate buffer to hold name of an attribute + */ + c_buf_size = (size_t)*size + 1; + c_buf = (char *)HDmalloc(c_buf_size); + if (c_buf == NULL) return ret_value; + + /* + * Call H5Aget_name_by_idx function. + */ + c_size = H5Aget_name_by_idx((hid_t)*loc_id, c_obj_name, c_idx_type, c_order, (hsize_t)*n, c_buf, c_buf_size,(hid_t)*lapl_id); + +/* printf( "In C routine, The attr name is %s %i \n ", c_buf, c_buf_size ); */ +/* printf( "In C routine, The c_size is %i \n ", c_size ); */ + + if (c_size < 0) goto done; /* * Convert C name to FORTRAN and place it in the given buffer */ - HD5packFstring(c_buf, _fcdtocp(buf), (size_t)*bufsize); + HD5packFstring(c_buf, _fcdtocp(name), c_buf_size); + *size = (size_t_f)c_size; + ret_value = 0; + +done: + if(c_obj_name) + HDfree(c_obj_name); + HDfree(c_buf); + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5aopen_by_idx_c + * Purpose: Call H5Aopen_by_idx + * Inputs: loc_id - Object identifier + * obj_name - Name of object to which attribute is attached + * obj_namelen - name length + * idx_type - Type of index; Possible values are: + * H5_INDEX_UNKNOWN - Unknown index type + * H5_INDEX_NAME - Index on names + * H5_INDEX_CRT_ORDER - Index on creation order + * H5_INDEX_N - Number of indices defined + * + * order - Order in which to iterate over index; Possible values are: + * H5_ITER_UNKNOWN - Unknown order + * H5_ITER_INC - Increasing order + * H5_ITER_DEC - Decreasing order + * H5_ITER_NATIVE - No particular order, whatever is fastest + * H5_ITER_N - Number of iteration orders + * + * n - Attribute’s position in index + * aapl_id - Attribute access property list + * lapl_id - Link access property list + * Outputs: attr_id - attribute identifer + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * January, 2008 + * Modifications: N/A + *---------------------------------------------------------------------------*/ +int_f +nh5aopen_by_idx_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen, + int_f *idx_type, int_f *order, size_t_f *n, hid_t_f *aapl_id, hid_t_f *lapl_id, hid_t_f *attr_id ) +{ + char *c_obj_name = NULL; /* Buffer to hold C string */ + H5_index_t c_idx_type; + H5_iter_order_t c_order; + int_f ret_value = 0; /* Return value */ + + /* + * Convert FORTRAN name to C name + */ + if((c_obj_name = HD5f2cstring(obj_name, (size_t)*obj_namelen)) == NULL) + HGOTO_DONE(FAIL); + + c_idx_type = (H5_index_t)*idx_type; + c_order = (H5_iter_order_t)*order; + + /* + * Call H5Aopen_by_idx function. + */ + if((*attr_id = (hid_t_f)H5Aopen_by_idx((hid_t)*loc_id, c_obj_name, c_idx_type, c_order, (hsize_t)*n, (hid_t)*aapl_id, (hid_t)*lapl_id)) < 0) + HGOTO_DONE(FAIL); +done: + if(c_obj_name) + HDfree(c_obj_name); + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5aget_info_c + * Purpose: Call H5Aget_info + * Inputs: loc_id - Object identifier + * Outputs: + * corder_valid - Indicates whether the the creation order data is valid for this attribute + * corder - Is a positive integer containing the creation order of the attribute + * cset - Indicates the character set used for the attribute’s name + * data_size - indicates the size, in the number of characters, of the attribute + * + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * January, 2008 + * Modifications: N/A + *---------------------------------------------------------------------------*/ +int_f +nh5aget_info_c (hid_t_f *loc_id, int_f *corder_valid, int_f *corder, + int_f *cset, hsize_t_f *data_size ) +{ + + int_f ret_value = 0; /* Return value */ + H5A_info_t ainfo; + + + /* + * Call H5Aget_info function. + */ + if(H5Aget_info((hid_t)*loc_id,&ainfo) < 0) + HGOTO_DONE(FAIL); + + /* Unpack the structure */ + + *corder_valid = 0; + if(ainfo.corder_valid > 0) *corder_valid = 1; + + *corder = (int_f)ainfo.corder; + *cset = (int_f)ainfo.cset; + *data_size = (hsize_t)ainfo.data_size; + +done: + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5aget_info_by_idx_c + * Purpose: Call H5Aget_info_by_idx + * Inputs: loc_id - Object identifier + * obj_name - Name of object to which attribute is attached + * obj_namelen - name length + * idx_type - Type of index; Possible values are: + * H5_INDEX_UNKNOWN - Unknown index type + * H5_INDEX_NAME - Index on names + * H5_INDEX_CRT_ORDER - Index on creation order + * H5_INDEX_N - Number of indices defined + * + * order - Order in which to iterate over index; Possible values are: + * H5_ITER_UNKNOWN - Unknown order + * H5_ITER_INC - Increasing order + * H5_ITER_DEC - Decreasing order + * H5_ITER_NATIVE - No particular order, whatever is fastest + * H5_ITER_N - Number of iteration orders + * + * n - Attribute’s position in index + * lapl_id - Link access property list + * Outputs: + * corder_valid - Indicates whether the the creation order data is valid for this attribute + * corder - Is a positive integer containing the creation order of the attribute + * cset - Indicates the character set used for the attribute’s name + * data_size - indicates the size, in the number of characters, of the attribute + * + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * January, 2008 + * Modifications: N/A + *---------------------------------------------------------------------------*/ +int_f +nh5aget_info_by_idx_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen, + int_f *idx_type, int_f *order, hsize_t_f *n, hid_t_f *lapl_id, + int_f *corder_valid, int_f *corder, + int_f *cset, hsize_t_f *data_size ) +{ + char *c_obj_name = NULL; /* Buffer to hold C string */ + H5_index_t c_idx_type; + H5_iter_order_t c_order; + int_f ret_value = 0; /* Return value */ + H5A_info_t ainfo; + + /* + * Convert FORTRAN name to C name + */ + if((c_obj_name = HD5f2cstring(obj_name, (size_t)*obj_namelen)) == NULL) + HGOTO_DONE(FAIL); + + c_idx_type = (H5_index_t)*idx_type; + c_order = (H5_iter_order_t)*order; + /* + * Call H5Ainfo_by_idx function. + */ + if(H5Aget_info_by_idx((hid_t)*loc_id, c_obj_name, c_idx_type, c_order, (hsize_t)*n, + &ainfo, (hid_t)*lapl_id) < 0) + HGOTO_DONE(FAIL); + + /* Unpack the structure */ + + *corder_valid = 0; + if(ainfo.corder_valid > 0) *corder_valid = 1; + + *corder = (int_f)ainfo.corder; + *cset = (int_f)ainfo.cset; + *data_size = (hsize_t)ainfo.data_size; + +done: + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5aget_info_by_name_c + * Purpose: Call H5Aget_info_by_name + * Inputs: loc_id - Object identifier + * obj_name - Name of object to which attribute is attached + * obj_namelen - name length + * attr_name - Attribute name + * attr_namelen - attribute name length + * lapl_id - Link access property list + * Outputs: + * corder_valid - Indicates whether the the creation order data is valid for this attribute + * corder - Is a positive integer containing the creation order of the attribute + * cset - Indicates the character set used for the attribute’s name + * data_size - indicates the size, in the number of characters, of the attribute + * + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * January, 2008 + * Modifications: N/A + *---------------------------------------------------------------------------*/ +int_f +nh5aget_info_by_name_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen, + _fcd attr_name, size_t_f *attr_namelen, hid_t_f *lapl_id, + int_f *corder_valid, int_f *corder, + int_f *cset, hsize_t_f *data_size ) +{ + char *c_obj_name = NULL; /* Buffer to hold C string */ + char *c_attr_name = NULL; /* Buffer to hold C string */ + int_f ret_value = 0; /* Return value */ + H5A_info_t ainfo; + + /* + * Convert FORTRAN name to C name + */ + if((c_obj_name = HD5f2cstring(obj_name, (size_t)*obj_namelen)) == NULL) + HGOTO_DONE(FAIL); + if((c_attr_name = HD5f2cstring(attr_name, (size_t)*attr_namelen)) == NULL) + HGOTO_DONE(FAIL); + + /* + * Call H5Ainfo_by_name function. + */ + if(H5Aget_info_by_name((hid_t)*loc_id, c_obj_name, c_attr_name, + &ainfo, (hid_t)*lapl_id) < 0) + HGOTO_DONE(FAIL); + + /* Unpack the structure */ + + *corder_valid = 0; + if(ainfo.corder_valid > 0) *corder_valid = 1; + + *corder = (int_f)ainfo.corder; + *cset = (int_f)ainfo.cset; + *data_size = (hsize_t)ainfo.data_size; + +done: + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5acreate_by_name_c + * Purpose: Call h5acreate_by_name + + * Inputs: + * loc_id - Object identifier + * obj_name - Name of object to which attribute is attached + * obj_namelen - name length + * attr_name - Attribute name + * attr_namelen - attribute name length + * type_id - Attribute datatype identifier + * space_id - Attribute dataspace identifier + * acpl_id - Attribute creation property list identifier (Currently not used.) + * aapl_id - Attribute access property list identifier (Currently not used.) + * lapl_id - Link access property list + * + * Outputs: + * attr - an attribute identifier + * + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * February, 2008 + * Modifications: N/A + *---------------------------------------------------------------------------*/ +int_f +nh5acreate_by_name_c(hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen, + _fcd attr_name, size_t_f *attr_namelen, hid_t_f *type_id, + hid_t_f *space_id, hid_t_f *acpl_id, hid_t_f *aapl_id, + hid_t_f *lapl_id, hid_t_f *attr_id ) +{ + char *c_obj_name = NULL; /* Buffer to hold C string */ + char *c_attr_name = NULL; /* Buffer to hold C string */ + int_f ret_value = 0; /* Return value */ + + /* + * Convert FORTRAN name to C name + */ + if((c_obj_name = HD5f2cstring(obj_name, (size_t)*obj_namelen)) == NULL) + HGOTO_DONE(FAIL); + if((c_attr_name = HD5f2cstring(attr_name, (size_t)*attr_namelen)) == NULL) + HGOTO_DONE(FAIL); + + /* + * Call H5Acreate_by_name function. + */ + if((*attr_id = (hid_t_f)H5Acreate_by_name((hid_t)*loc_id, c_obj_name, c_attr_name, + (hid_t)*type_id, (hid_t)*space_id,(hid_t)*acpl_id,(hid_t)*aapl_id,(hid_t)*lapl_id )) < 0) + HGOTO_DONE(FAIL); + +done: + if(c_obj_name) + HDfree(c_obj_name); + if(c_attr_name) + HDfree(c_attr_name); + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5aexists_c + * Purpose: CAll h5aexists + * Inputs: + * obj_id - Object identifier + * attr_name - Attribute name + * Outputs: + * attr_exists_c - returns a positive value, for TRUE, or 0 (zero), for FALSE. + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * February, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5aexists_c (hid_t_f *obj_id, _fcd name, size_t_f *namelen, hid_t_f *attr_exists) +{ + char *c_name = NULL; /* Buffer to hold C string */ + int_f ret_value = 0; /* Return value */ + + /* + * Convert FORTRAN name to C name + */ + if((c_name = HD5f2cstring(name, (size_t)*namelen)) == NULL) + HGOTO_DONE(FAIL); + + /* + * Call H5Aexists function. + */ + if((*attr_exists = (hid_t_f)H5Aexists((hid_t)*obj_id, c_name)) < 0) + HGOTO_DONE(FAIL); + +done: + if(c_name) + HDfree(c_name); + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5aexists_by_name_c + * Purpose: CAll H5Aexists_by_name + * Inputs: + * loc_id - Location identifier + * obj_name - Object name either relative to loc_id, absolute from the file’s root group, or '.' (a dot) + * attr_name - Attribute name + * lapl_id - Link access property list identifier + * Outputs: + * attr_exists_c - returns a positive value, for TRUE, or 0 (zero), for FALSE. + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * February, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5aexists_by_name_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen, _fcd attr_name, size_t_f *attr_namelen, + hid_t_f *lapl_id, int_f *attr_exists) +{ + char *c_obj_name = NULL; /* Buffer to hold object name C string */ + char *c_attr_name = NULL; /* Buffer to hold attribute name C string */ + int_f ret_value = 0; /* Return value */ + + /* + * Convert FORTRAN name to C name + */ + if((c_obj_name = HD5f2cstring(obj_name, (size_t)*obj_namelen)) == NULL) + HGOTO_DONE(FAIL); + if((c_attr_name = HD5f2cstring(attr_name, (size_t)*attr_namelen)) == NULL) + HGOTO_DONE(FAIL); + + /* + * Call H5Aexists_by_name function. + */ + if((*attr_exists = (int_f)H5Aexists_by_name((hid_t)*loc_id, c_obj_name, c_attr_name, (hid_t)*lapl_id)) < 0) + HGOTO_DONE(FAIL); + +done: + if(c_obj_name) + HDfree(c_obj_name); + if(c_attr_name) + HDfree(c_attr_name); + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5aopen_by_name_c + * Purpose: Call H5Aopen_by_name + * Inputs: + * loc_id - Location identifier + * obj_name - Object name either relative to loc_id, absolute from the file’s root group, or '.' (a dot) + * attr_name - Attribute name + * aapl_id - Attribute access property list (Currently unused; should be passed in as H5P_DEFAULT.) + * lapl_id - Link access property list identifier + * Outputs: + * attr_id - attribute identifier + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * February, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5aopen_by_name_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen, _fcd attr_name, size_t_f *attr_namelen, + hid_t_f *aapl_id, hid_t_f *lapl_id, hid_t_f *attr_id) +{ + char *c_obj_name = NULL; /* Buffer to hold object name C string */ + char *c_attr_name = NULL; /* Buffer to hold attribute name C string */ + int_f ret_value = 0; /* Return value */ + + /* + * Convert FORTRAN name to C name + */ + if((c_obj_name = HD5f2cstring(obj_name, (size_t)*obj_namelen)) == NULL) + HGOTO_DONE(FAIL); + if((c_attr_name = HD5f2cstring(attr_name, (size_t)*attr_namelen)) == NULL) + HGOTO_DONE(FAIL); + + /* + * Call H5Aopen function. + */ + if((*attr_id = (hid_t_f)H5Aopen_by_name((hid_t)*loc_id, c_obj_name, c_attr_name, (hid_t)*aapl_id, (hid_t)*lapl_id)) < 0) + HGOTO_DONE(FAIL); + + done: + if(c_obj_name) + HDfree(c_obj_name); + if(c_attr_name) + HDfree(c_attr_name); + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5arename_c + * Purpose: Calls H5Arename + * Inputs: loc_id - Object identifier + * old_attr_name - Prior attribute name + * old_attr_name_len - Prior attribute name length + * new_attr_name - New attribute name + * new_attr_name_len - New attribute name length + * Outputs: N/A + * Returns: 0 on success, -1 on failure + * Programmer: M. S. Breitenfeld + * January, 2008 + * Modifications: N/A + *---------------------------------------------------------------------------*/ + +int_f +nh5arename_c( hid_t_f *loc_id, + _fcd old_attr_name, size_t_f *old_attr_namelen, + _fcd new_attr_name, size_t_f *new_attr_namelen) +{ + char *c_old_attr_name = NULL; /* Buffer to hold C string */ + char *c_new_attr_name = NULL; /* Buffer to hold C string */ + int_f ret_value=0; /* Return value */ + /* + * Convert FORTRAN name to C name + */ + if((c_old_attr_name = HD5f2cstring(old_attr_name, (size_t)*old_attr_namelen)) == NULL) + HGOTO_DONE(FAIL); + if((c_new_attr_name = HD5f2cstring(new_attr_name, (size_t)*new_attr_namelen)) == NULL) + HGOTO_DONE(FAIL); + + if(H5Arename((hid_t)*loc_id,c_old_attr_name,c_new_attr_name) < 0) + HGOTO_DONE(FAIL); done: - if(c_buf) HDfree(c_buf); - return ret_value; + if(c_old_attr_name) + HDfree(c_old_attr_name); + if(c_new_attr_name) + HDfree(c_new_attr_name); + return ret_value; } diff --git a/fortran/src/H5Aff.f90 b/fortran/src/H5Aff.f90 index d6f1b6f..a6c0162 100644 --- a/fortran/src/H5Aff.f90 +++ b/fortran/src/H5Aff.f90 @@ -16,96 +16,94 @@ ! ! This file contains Fortran90 interfaces for H5A functions. ! - MODULE H5A +MODULE H5A - USE H5GLOBAL + USE H5GLOBAL ! !On Windows there are no big (integer*8) integers, so overloading !for bug #670 does not work. I have to use DEC compilation directives to make !Windows DEC Visual Fortran and OSF compilers happy and do right things. ! 05/01/02 EP - -! - INTERFACE h5awrite_f - - MODULE PROCEDURE h5awrite_integer_scalar - MODULE PROCEDURE h5awrite_integer_1 - MODULE PROCEDURE h5awrite_integer_2 - MODULE PROCEDURE h5awrite_integer_3 - MODULE PROCEDURE h5awrite_integer_4 - MODULE PROCEDURE h5awrite_integer_5 - MODULE PROCEDURE h5awrite_integer_6 - MODULE PROCEDURE h5awrite_integer_7 - MODULE PROCEDURE h5awrite_char_scalar - MODULE PROCEDURE h5awrite_char_1 - MODULE PROCEDURE h5awrite_char_2 - MODULE PROCEDURE h5awrite_char_3 - MODULE PROCEDURE h5awrite_char_4 - MODULE PROCEDURE h5awrite_char_5 - MODULE PROCEDURE h5awrite_char_6 - MODULE PROCEDURE h5awrite_char_7 - MODULE PROCEDURE h5awrite_real_scalar - MODULE PROCEDURE h5awrite_real_1 - MODULE PROCEDURE h5awrite_real_2 - MODULE PROCEDURE h5awrite_real_3 - MODULE PROCEDURE h5awrite_real_4 - MODULE PROCEDURE h5awrite_real_5 - MODULE PROCEDURE h5awrite_real_6 - MODULE PROCEDURE h5awrite_real_7 +! + INTERFACE h5awrite_f + + MODULE PROCEDURE h5awrite_integer_scalar + MODULE PROCEDURE h5awrite_integer_1 + MODULE PROCEDURE h5awrite_integer_2 + MODULE PROCEDURE h5awrite_integer_3 + MODULE PROCEDURE h5awrite_integer_4 + MODULE PROCEDURE h5awrite_integer_5 + MODULE PROCEDURE h5awrite_integer_6 + MODULE PROCEDURE h5awrite_integer_7 + MODULE PROCEDURE h5awrite_char_scalar + MODULE PROCEDURE h5awrite_char_1 + MODULE PROCEDURE h5awrite_char_2 + MODULE PROCEDURE h5awrite_char_3 + MODULE PROCEDURE h5awrite_char_4 + MODULE PROCEDURE h5awrite_char_5 + MODULE PROCEDURE h5awrite_char_6 + MODULE PROCEDURE h5awrite_char_7 + MODULE PROCEDURE h5awrite_real_scalar + MODULE PROCEDURE h5awrite_real_1 + MODULE PROCEDURE h5awrite_real_2 + MODULE PROCEDURE h5awrite_real_3 + MODULE PROCEDURE h5awrite_real_4 + MODULE PROCEDURE h5awrite_real_5 + MODULE PROCEDURE h5awrite_real_6 + MODULE PROCEDURE h5awrite_real_7 ! Comment if on Crays - MODULE PROCEDURE h5awrite_double_scalar - MODULE PROCEDURE h5awrite_double_1 - MODULE PROCEDURE h5awrite_double_2 - MODULE PROCEDURE h5awrite_double_3 - MODULE PROCEDURE h5awrite_double_4 - MODULE PROCEDURE h5awrite_double_5 - MODULE PROCEDURE h5awrite_double_6 - MODULE PROCEDURE h5awrite_double_7 + MODULE PROCEDURE h5awrite_double_scalar + MODULE PROCEDURE h5awrite_double_1 + MODULE PROCEDURE h5awrite_double_2 + MODULE PROCEDURE h5awrite_double_3 + MODULE PROCEDURE h5awrite_double_4 + MODULE PROCEDURE h5awrite_double_5 + MODULE PROCEDURE h5awrite_double_6 + MODULE PROCEDURE h5awrite_double_7 ! End commnet if on Crays - - END INTERFACE - - INTERFACE h5aread_f - - MODULE PROCEDURE h5aread_integer_scalar - MODULE PROCEDURE h5aread_integer_1 - MODULE PROCEDURE h5aread_integer_2 - MODULE PROCEDURE h5aread_integer_3 - MODULE PROCEDURE h5aread_integer_4 - MODULE PROCEDURE h5aread_integer_5 - MODULE PROCEDURE h5aread_integer_6 - MODULE PROCEDURE h5aread_integer_7 - MODULE PROCEDURE h5aread_char_scalar - MODULE PROCEDURE h5aread_char_1 - MODULE PROCEDURE h5aread_char_2 - MODULE PROCEDURE h5aread_char_3 - MODULE PROCEDURE h5aread_char_4 - MODULE PROCEDURE h5aread_char_5 - MODULE PROCEDURE h5aread_char_6 - MODULE PROCEDURE h5aread_char_7 - MODULE PROCEDURE h5aread_real_scalar - MODULE PROCEDURE h5aread_real_1 - MODULE PROCEDURE h5aread_real_2 - MODULE PROCEDURE h5aread_real_3 - MODULE PROCEDURE h5aread_real_4 - MODULE PROCEDURE h5aread_real_5 - MODULE PROCEDURE h5aread_real_6 - MODULE PROCEDURE h5aread_real_7 + END INTERFACE + + INTERFACE h5aread_f + + MODULE PROCEDURE h5aread_integer_scalar + MODULE PROCEDURE h5aread_integer_1 + MODULE PROCEDURE h5aread_integer_2 + MODULE PROCEDURE h5aread_integer_3 + MODULE PROCEDURE h5aread_integer_4 + MODULE PROCEDURE h5aread_integer_5 + MODULE PROCEDURE h5aread_integer_6 + MODULE PROCEDURE h5aread_integer_7 + MODULE PROCEDURE h5aread_char_scalar + MODULE PROCEDURE h5aread_char_1 + MODULE PROCEDURE h5aread_char_2 + MODULE PROCEDURE h5aread_char_3 + MODULE PROCEDURE h5aread_char_4 + MODULE PROCEDURE h5aread_char_5 + MODULE PROCEDURE h5aread_char_6 + MODULE PROCEDURE h5aread_char_7 + MODULE PROCEDURE h5aread_real_scalar + MODULE PROCEDURE h5aread_real_1 + MODULE PROCEDURE h5aread_real_2 + MODULE PROCEDURE h5aread_real_3 + MODULE PROCEDURE h5aread_real_4 + MODULE PROCEDURE h5aread_real_5 + MODULE PROCEDURE h5aread_real_6 + MODULE PROCEDURE h5aread_real_7 ! Comment if on Crays - MODULE PROCEDURE h5aread_double_scalar - MODULE PROCEDURE h5aread_double_1 - MODULE PROCEDURE h5aread_double_2 - MODULE PROCEDURE h5aread_double_3 - MODULE PROCEDURE h5aread_double_4 - MODULE PROCEDURE h5aread_double_5 - MODULE PROCEDURE h5aread_double_6 - MODULE PROCEDURE h5aread_double_7 + MODULE PROCEDURE h5aread_double_scalar + MODULE PROCEDURE h5aread_double_1 + MODULE PROCEDURE h5aread_double_2 + MODULE PROCEDURE h5aread_double_3 + MODULE PROCEDURE h5aread_double_4 + MODULE PROCEDURE h5aread_double_5 + MODULE PROCEDURE h5aread_double_6 + MODULE PROCEDURE h5aread_double_7 ! End commnet if on Crays ! - END INTERFACE - - CONTAINS + END INTERFACE + +CONTAINS !---------------------------------------------------------------------- ! Name: h5acreate_f @@ -114,7 +112,7 @@ ! or named datatype ! ! Inputs: -! obj_id - identifier of an object (group, dataset, +! loc_id - identifier of an object (group, dataset, ! or named datatype) attribute is attached to ! name - attribute name ! type_id - attribute datatype identifier @@ -126,7 +124,8 @@ ! Success: 0 ! Failure: -1 ! Optional parameters: -! creation_prp - creation property list identifier +! acpl_id - Attribute creation property list identifier +! appl_id - Attribute access property list identifier ! ! Programmer: Elena Pourmal ! August 12, 1999 @@ -136,53 +135,60 @@ ! port). February 27, 2001 ! !---------------------------------------------------------------------- - SUBROUTINE h5acreate_f(obj_id, name, type_id, space_id, attr_id, & - hdferr, creation_prp) + SUBROUTINE h5acreate_f(loc_id, name, type_id, space_id, attr_id, & + hdferr, acpl_id, aapl_id ) !This definition is needed for Windows DLLs !DEC$if defined(BUILD_HDF5_DLL) !DEC$attributes dllexport :: h5acreate_f !DEC$endif - IMPLICIT NONE - INTEGER(HID_T), INTENT(IN) :: obj_id ! Object identifier - CHARACTER(LEN=*), INTENT(IN) :: name ! Attribute name - INTEGER(HID_T), INTENT(IN) :: type_id - ! Attribute datatype identifier - INTEGER(HID_T), INTENT(IN) :: space_id - ! Attribute dataspace identifier - INTEGER(HID_T), INTENT(OUT) :: attr_id ! Attribute identifier - INTEGER, INTENT(OUT) :: hdferr ! Error code - INTEGER(HID_T), OPTIONAL, INTENT(IN) :: creation_prp - ! Attribute creation property - ! list identifier - INTEGER(HID_T) :: creation_prp_default - INTEGER(SIZE_T) :: namelen + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id ! Object identifier + CHARACTER(LEN=*), INTENT(IN) :: name ! Attribute name + INTEGER(HID_T), INTENT(IN) :: type_id + ! Attribute datatype identifier + INTEGER(HID_T), INTENT(IN) :: space_id + ! Attribute dataspace identifier + INTEGER(HID_T), INTENT(OUT) :: attr_id ! Attribute identifier + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! 0 on success and -1 on failure + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: acpl_id ! Attribute creation property list identifier + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: aapl_id ! Attribute access property list identifier + + INTEGER(HID_T) :: acpl_id_default + INTEGER(HID_T) :: aapl_id_default + INTEGER(SIZE_T) :: namelen ! INTEGER, EXTERNAL :: h5acreate_c ! MS FORTRAN needs explicit interface for C functions called here. ! - INTERFACE - INTEGER FUNCTION h5acreate_c(obj_id, name, namelen, type_id, & - space_id, creation_prp_default, attr_id) - USE H5GLOBAL - !DEC$ IF DEFINED(HDF5F90_WINDOWS) - !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5ACREATE_C'::h5acreate_c - !DEC$ ENDIF - !DEC$ATTRIBUTES reference :: name - INTEGER(HID_T), INTENT(IN) :: obj_id - CHARACTER(LEN=*), INTENT(IN) :: name - INTEGER(SIZE_T) :: namelen - INTEGER(HID_T), INTENT(IN) :: type_id - INTEGER(HID_T), INTENT(IN) :: space_id - INTEGER(HID_T) :: creation_prp_default - INTEGER(HID_T), INTENT(OUT) :: attr_id - END FUNCTION h5acreate_c - END INTERFACE - - creation_prp_default = H5P_DEFAULT_F - namelen = LEN(NAME) - if (present(creation_prp)) creation_prp_default = creation_prp - hdferr = h5acreate_c(obj_id, name, namelen, type_id, space_id, & - creation_prp_default, attr_id) - END SUBROUTINE h5acreate_f + INTERFACE + INTEGER FUNCTION h5acreate_c(loc_id, name, namelen, type_id, & + space_id, acpl_id_default, aapl_id_default, attr_id) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5ACREATE_C'::h5acreate_c + !DEC$ ENDIF + !DEC$ATTRIBUTES reference :: name + INTEGER(HID_T), INTENT(IN) :: loc_id + CHARACTER(LEN=*), INTENT(IN) :: name + INTEGER(SIZE_T) :: namelen + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(HID_T), INTENT(IN) :: space_id + INTEGER(HID_T) :: acpl_id_default + INTEGER(HID_T) :: aapl_id_default + INTEGER(HID_T), INTENT(OUT) :: attr_id + END FUNCTION h5acreate_c + END INTERFACE + + acpl_id_default = H5P_DEFAULT_F + aapl_id_default = H5P_DEFAULT_F + namelen = LEN(NAME) + IF (PRESENT(acpl_id)) acpl_id_default = acpl_id + IF (PRESENT(aapl_id)) aapl_id_default = aapl_id + + hdferr = h5acreate_c(loc_id, name, namelen, type_id, space_id, & + acpl_id_default, aapl_id_default, attr_id) + + END SUBROUTINE h5acreate_f !---------------------------------------------------------------------- @@ -211,38 +217,38 @@ ! !---------------------------------------------------------------------- - SUBROUTINE h5aopen_name_f(obj_id, name, attr_id, hdferr) + SUBROUTINE h5aopen_name_f(obj_id, name, attr_id, hdferr) !This definition is needed for Windows DLLs !DEC$if defined(BUILD_HDF5_DLL) !DEC$attributes dllexport :: h5aopen_name_f !DEC$endif - IMPLICIT NONE - INTEGER(HID_T), INTENT(IN) :: obj_id ! Object identifier - CHARACTER(LEN=*), INTENT(IN) :: name ! Attribute name - INTEGER(HID_T), INTENT(OUT) :: attr_id ! Attribute identifier - INTEGER, INTENT(OUT) :: hdferr ! Error code - INTEGER(SIZE_T) :: namelen + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: obj_id ! Object identifier + CHARACTER(LEN=*), INTENT(IN) :: name ! Attribute name + INTEGER(HID_T), INTENT(OUT) :: attr_id ! Attribute identifier + INTEGER, INTENT(OUT) :: hdferr ! Error code + INTEGER(SIZE_T) :: namelen ! INTEGER, EXTERNAL :: h5aopen_name_c ! MS FORTRAN needs explicit interface for C functions called here. ! - INTERFACE - INTEGER FUNCTION h5aopen_name_c(obj_id, name, namelen, attr_id) - USE H5GLOBAL - !DEC$ IF DEFINED(HDF5F90_WINDOWS) - !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AOPEN_NAME_C'::h5aopen_name_c - !DEC$ ENDIF - !DEC$ATTRIBUTES reference :: name - INTEGER(HID_T), INTENT(IN) :: obj_id - CHARACTER(LEN=*), INTENT(IN) :: name - INTEGER(SIZE_T) :: namelen - INTEGER(HID_T), INTENT(OUT) :: attr_id - END FUNCTION h5aopen_name_c - END INTERFACE - - namelen = LEN(name) - hdferr = h5aopen_name_c(obj_id, name, namelen, attr_id) - END SUBROUTINE h5aopen_name_f + INTERFACE + INTEGER FUNCTION h5aopen_name_c(obj_id, name, namelen, attr_id) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AOPEN_NAME_C'::h5aopen_name_c + !DEC$ ENDIF + !DEC$ATTRIBUTES reference :: name + INTEGER(HID_T), INTENT(IN) :: obj_id + CHARACTER(LEN=*), INTENT(IN) :: name + INTEGER(SIZE_T) :: namelen + INTEGER(HID_T), INTENT(OUT) :: attr_id + END FUNCTION h5aopen_name_c + END INTERFACE + + namelen = LEN(name) + hdferr = h5aopen_name_c(obj_id, name, namelen, attr_id) + END SUBROUTINE h5aopen_name_f !---------------------------------------------------------------------- @@ -271,386 +277,380 @@ ! !---------------------------------------------------------------------- - SUBROUTINE h5aopen_idx_f(obj_id, index, attr_id, hdferr) + SUBROUTINE h5aopen_idx_f(obj_id, index, attr_id, hdferr) !This definition is needed for Windows DLLs !DEC$if defined(BUILD_HDF5_DLL) !DEC$attributes dllexport :: h5aopen_idx_f !DEC$endif - IMPLICIT NONE - INTEGER(HID_T), INTENT(IN) :: obj_id ! Object identifier - INTEGER, INTENT(IN) :: index ! Attribute index - INTEGER(HID_T), INTENT(OUT) :: attr_id ! Attribute identifier - INTEGER, INTENT(OUT) :: hdferr ! Error code - + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: obj_id ! Object identifier + INTEGER, INTENT(IN) :: index ! Attribute index + INTEGER(HID_T), INTENT(OUT) :: attr_id ! Attribute identifier + INTEGER, INTENT(OUT) :: hdferr ! Error code + ! INTEGER, EXTERNAL :: h5aopen_idx_c ! MS FORTRAN needs explicit interface for C functions called here. ! - INTERFACE - INTEGER FUNCTION h5aopen_idx_c(obj_id, index, attr_id) - USE H5GLOBAL - !DEC$ IF DEFINED(HDF5F90_WINDOWS) - !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AOPEN_IDX_C'::h5aopen_idx_c - !DEC$ ENDIF - INTEGER(HID_T), INTENT(IN) :: obj_id - INTEGER, INTENT(IN) :: index - INTEGER(HID_T), INTENT(OUT) :: attr_id - END FUNCTION h5aopen_idx_c - END INTERFACE - - hdferr = h5aopen_idx_c(obj_id, index, attr_id) - END SUBROUTINE h5aopen_idx_f - - - SUBROUTINE h5awrite_integer_scalar(attr_id, memtype_id, buf, dims, hdferr) + INTERFACE + INTEGER FUNCTION h5aopen_idx_c(obj_id, index, attr_id) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AOPEN_IDX_C'::h5aopen_idx_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: obj_id + INTEGER, INTENT(IN) :: index + INTEGER(HID_T), INTENT(OUT) :: attr_id + END FUNCTION h5aopen_idx_c + END INTERFACE + + hdferr = h5aopen_idx_c(obj_id, index, attr_id) + END SUBROUTINE h5aopen_idx_f + + + SUBROUTINE h5awrite_integer_scalar(attr_id, memtype_id, buf, dims, hdferr) !This definition is needed for Windows DLLs !DEC$if defined(BUILD_HDF5_DLL) !DEC$attributes dllexport :: h5awrite_integer_scalar !DEC$endif - IMPLICIT NONE - INTEGER(HID_T), INTENT(IN) :: attr_id ! Attribute identifier - INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype - ! identifier (in memory) - INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - INTEGER, INTENT(IN) :: buf ! Attribute data - INTEGER, INTENT(OUT) :: hdferr ! Error code + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: attr_id ! Attribute identifier + INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype + ! identifier (in memory) + INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes + INTEGER, INTENT(IN) :: buf ! Attribute data + INTEGER, INTENT(OUT) :: hdferr ! Error code ! INTEGER, EXTERNAL :: h5awrite_integer_s_c ! MS FORTRAN needs explicit interface for C functions called here. ! - INTERFACE - INTEGER FUNCTION h5awrite_integer_s_c(attr_id, memtype_id, buf, dims) - USE H5GLOBAL - !DEC$ IF DEFINED(HDF5F90_WINDOWS) - !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_S_C'::h5awrite_integer_s_c - !DEC$ ENDIF - INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - INTEGER(HID_T), INTENT(IN) :: attr_id - INTEGER(HID_T), INTENT(IN) :: memtype_id - INTEGER, INTENT(IN)::buf - END FUNCTION h5awrite_integer_s_c - END INTERFACE - - hdferr = h5awrite_integer_s_c(attr_id, memtype_id, buf, dims) - END SUBROUTINE h5awrite_integer_scalar - - SUBROUTINE h5awrite_integer_1(attr_id, memtype_id, buf, dims, hdferr) + INTERFACE + INTEGER FUNCTION h5awrite_integer_s_c(attr_id, memtype_id, buf, dims) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_S_C'::h5awrite_integer_s_c + !DEC$ ENDIF + INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes + INTEGER(HID_T), INTENT(IN) :: attr_id + INTEGER(HID_T), INTENT(IN) :: memtype_id + INTEGER, INTENT(IN)::buf + END FUNCTION h5awrite_integer_s_c + END INTERFACE + + hdferr = h5awrite_integer_s_c(attr_id, memtype_id, buf, dims) + END SUBROUTINE h5awrite_integer_scalar + + SUBROUTINE h5awrite_integer_1(attr_id, memtype_id, buf, dims, hdferr) !This definition is needed for Windows DLLs !DEC$if defined(BUILD_HDF5_DLL) !DEC$attributes dllexport :: h5awrite_integer_1 !DEC$endif - IMPLICIT NONE - INTEGER(HID_T), INTENT(IN) :: attr_id ! Attribute identifier - INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype - ! identifier (in memory) - INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - INTEGER, INTENT(IN) , & - DIMENSION(dims(1)) :: buf - ! Attribute data - INTEGER, INTENT(OUT) :: hdferr ! Error code - + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: attr_id ! Attribute identifier + INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype + ! identifier (in memory) + INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes + INTEGER, INTENT(IN) , & + DIMENSION(dims(1)) :: buf + ! Attribute data + INTEGER, INTENT(OUT) :: hdferr ! Error code + ! INTEGER, EXTERNAL :: h5awrite_integer_1_c ! MS FORTRAN needs explicit interface for C functions called here. ! - INTERFACE - INTEGER FUNCTION h5awrite_integer_1_c(attr_id, memtype_id, buf, dims) - USE H5GLOBAL - !DEC$ IF DEFINED(HDF5F90_WINDOWS) - !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_1_C'::h5awrite_integer_1_c - !DEC$ ENDIF - INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - INTEGER(HID_T), INTENT(IN) :: attr_id - INTEGER(HID_T), INTENT(IN) :: memtype_id - INTEGER, INTENT(IN), & - DIMENSION(dims(1)) :: buf - END FUNCTION h5awrite_integer_1_c - END INTERFACE + INTERFACE + INTEGER FUNCTION h5awrite_integer_1_c(attr_id, memtype_id, buf, dims) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_1_C'::h5awrite_integer_1_c + !DEC$ ENDIF + INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes + INTEGER(HID_T), INTENT(IN) :: attr_id + INTEGER(HID_T), INTENT(IN) :: memtype_id + INTEGER, INTENT(IN), DIMENSION(dims(1)) :: buf + END FUNCTION h5awrite_integer_1_c + END INTERFACE - hdferr = h5awrite_integer_1_c(attr_id, memtype_id, buf, dims) - END SUBROUTINE h5awrite_integer_1 + hdferr = h5awrite_integer_1_c(attr_id, memtype_id, buf, dims) + END SUBROUTINE h5awrite_integer_1 - SUBROUTINE h5awrite_integer_2(attr_id, memtype_id, buf, dims, hdferr) + + SUBROUTINE h5awrite_integer_2(attr_id, memtype_id, buf, dims, hdferr) !This definition is needed for Windows DLLs !DEC$if defined(BUILD_HDF5_DLL) !DEC$attributes dllexport :: h5awrite_integer_2 !DEC$endif - IMPLICIT NONE - INTEGER(HID_T), INTENT(IN) :: attr_id ! Attribute identifier - INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype - ! identifier (in memory) - INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - INTEGER, INTENT(IN) , & - DIMENSION(dims(1),dims(2)) :: buf - ! Attribute data - INTEGER, INTENT(OUT) :: hdferr ! Error code - + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: attr_id ! Attribute identifier + INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype + ! identifier (in memory) + INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes + INTEGER, INTENT(IN) , & + DIMENSION(dims(1),dims(2)) :: buf + ! Attribute data + INTEGER, INTENT(OUT) :: hdferr ! Error code + ! INTEGER, EXTERNAL :: h5awrite_integer_2_c ! MS FORTRAN needs explicit interface for C functions called here. ! - INTERFACE - INTEGER FUNCTION h5awrite_integer_2_c(attr_id, memtype_id, buf, dims) - USE H5GLOBAL - !DEC$ IF DEFINED(HDF5F90_WINDOWS) - !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_2_C'::h5awrite_integer_2_c - !DEC$ ENDIF - INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - INTEGER(HID_T), INTENT(IN) :: attr_id - INTEGER(HID_T), INTENT(IN) :: memtype_id - INTEGER, INTENT(IN), & - DIMENSION(dims(1),dims(2)) :: buf - END FUNCTION h5awrite_integer_2_c - END INTERFACE + INTERFACE + INTEGER FUNCTION h5awrite_integer_2_c(attr_id, memtype_id, buf, dims) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_2_C'::h5awrite_integer_2_c + !DEC$ ENDIF + INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes + INTEGER(HID_T), INTENT(IN) :: attr_id + INTEGER(HID_T), INTENT(IN) :: memtype_id + INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2)) :: buf + END FUNCTION h5awrite_integer_2_c + END INTERFACE - hdferr = h5awrite_integer_2_c(attr_id, memtype_id, buf, dims) - END SUBROUTINE h5awrite_integer_2 + hdferr = h5awrite_integer_2_c(attr_id, memtype_id, buf, dims) + END SUBROUTINE h5awrite_integer_2 - SUBROUTINE h5awrite_integer_3(attr_id, memtype_id, buf, dims, hdferr) + SUBROUTINE h5awrite_integer_3(attr_id, memtype_id, buf, dims, hdferr) !This definition is needed for Windows DLLs !DEC$if defined(BUILD_HDF5_DLL) !DEC$attributes dllexport :: h5awrite_integer_3 !DEC$endif - IMPLICIT NONE - INTEGER(HID_T), INTENT(IN) :: attr_id ! Attribute identifier - INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype - ! identifier (in memory) - INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - INTEGER, INTENT(IN) , & - DIMENSION(dims(1),dims(2),dims(3)) :: buf + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: attr_id ! Attribute identifier + INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype + ! identifier (in memory) + INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes + INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2),dims(3)) :: buf ! Attribute data - INTEGER, INTENT(OUT) :: hdferr ! Error code + INTEGER, INTENT(OUT) :: hdferr ! Error code ! INTEGER, EXTERNAL :: h5awrite_integer_3_c ! MS FORTRAN needs explicit interface for C functions called here. ! - INTERFACE - INTEGER FUNCTION h5awrite_integer_3_c(attr_id, memtype_id, buf, dims) - USE H5GLOBAL - !DEC$ IF DEFINED(HDF5F90_WINDOWS) - !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_3_C'::h5awrite_integer_3_c - !DEC$ ENDIF - INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - INTEGER(HID_T), INTENT(IN) :: attr_id - INTEGER(HID_T), INTENT(IN) :: memtype_id - INTEGER, INTENT(IN), & - DIMENSION(dims(1),dims(2),dims(3)) :: buf - END FUNCTION h5awrite_integer_3_c - END INTERFACE - - hdferr = h5awrite_integer_3_c(attr_id, memtype_id, buf, dims) - END SUBROUTINE h5awrite_integer_3 - - - SUBROUTINE h5awrite_integer_4(attr_id, memtype_id, buf, dims, hdferr) + INTERFACE + INTEGER FUNCTION h5awrite_integer_3_c(attr_id, memtype_id, buf, dims) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_3_C'::h5awrite_integer_3_c + !DEC$ ENDIF + INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes + INTEGER(HID_T), INTENT(IN) :: attr_id + INTEGER(HID_T), INTENT(IN) :: memtype_id + INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2),dims(3)) :: buf + END FUNCTION h5awrite_integer_3_c + END INTERFACE + + hdferr = h5awrite_integer_3_c(attr_id, memtype_id, buf, dims) + END SUBROUTINE h5awrite_integer_3 + + + SUBROUTINE h5awrite_integer_4(attr_id, memtype_id, buf, dims, hdferr) !This definition is needed for Windows DLLs !DEC$if defined(BUILD_HDF5_DLL) !DEC$attributes dllexport :: h5awrite_integer_4 !DEC$endif - IMPLICIT NONE - INTEGER(HID_T), INTENT(IN) :: attr_id ! Attribute identifier - INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype - ! identifier (in memory) - INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - INTEGER, INTENT(IN), & - DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf - ! Attribute data - INTEGER, INTENT(OUT) :: hdferr ! Error code + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: attr_id ! Attribute identifier + INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype + ! identifier (in memory) + INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes + INTEGER, INTENT(IN), & + DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf + ! Attribute data + INTEGER, INTENT(OUT) :: hdferr ! Error code ! INTEGER, EXTERNAL :: h5awrite_integer_4_c ! MS FORTRAN needs explicit interface for C functions called here. ! - INTERFACE - INTEGER FUNCTION h5awrite_integer_4_c(attr_id, memtype_id, buf, dims) - USE H5GLOBAL - !DEC$ IF DEFINED(HDF5F90_WINDOWS) - !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_4_C'::h5awrite_integer_4_c - !DEC$ ENDIF - INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - INTEGER(HID_T), INTENT(IN) :: attr_id - INTEGER(HID_T), INTENT(IN) :: memtype_id - INTEGER, INTENT(IN), & - DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf - END FUNCTION h5awrite_integer_4_c - END INTERFACE + INTERFACE + INTEGER FUNCTION h5awrite_integer_4_c(attr_id, memtype_id, buf, dims) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_4_C'::h5awrite_integer_4_c + !DEC$ ENDIF + INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes + INTEGER(HID_T), INTENT(IN) :: attr_id + INTEGER(HID_T), INTENT(IN) :: memtype_id + INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf + END FUNCTION h5awrite_integer_4_c + END INTERFACE - hdferr = h5awrite_integer_4_c(attr_id, memtype_id, buf, dims) - END SUBROUTINE h5awrite_integer_4 + hdferr = h5awrite_integer_4_c(attr_id, memtype_id, buf, dims) + END SUBROUTINE h5awrite_integer_4 - SUBROUTINE h5awrite_integer_5(attr_id, memtype_id, buf, dims, hdferr) + SUBROUTINE h5awrite_integer_5(attr_id, memtype_id, buf, dims, hdferr) !This definition is needed for Windows DLLs !DEC$if defined(BUILD_HDF5_DLL) !DEC$attributes dllexport :: h5awrite_integer_5 !DEC$endif - IMPLICIT NONE - INTEGER(HID_T), INTENT(IN) :: attr_id ! Attribute identifier - INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype - ! identifier (in memory) - INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - INTEGER, INTENT(IN), & - DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: attr_id ! Attribute identifier + INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype + ! identifier (in memory) + INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes + INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf ! Attribute data - INTEGER, INTENT(OUT) :: hdferr ! Error code + INTEGER, INTENT(OUT) :: hdferr ! Error code ! INTEGER, EXTERNAL :: h5awrite_integer_5_c ! MS FORTRAN needs explicit interface for C functions called here. ! - INTERFACE - INTEGER FUNCTION h5awrite_integer_5_c(attr_id, memtype_id, buf, dims) - USE H5GLOBAL - !DEC$ IF DEFINED(HDF5F90_WINDOWS) - !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_5_C'::h5awrite_integer_5_c - !DEC$ ENDIF - INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - INTEGER(HID_T), INTENT(IN) :: attr_id - INTEGER(HID_T), INTENT(IN) :: memtype_id - INTEGER, INTENT(IN), & - DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf - END FUNCTION h5awrite_integer_5_c - END INTERFACE + INTERFACE + INTEGER FUNCTION h5awrite_integer_5_c(attr_id, memtype_id, buf, dims) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_5_C'::h5awrite_integer_5_c + !DEC$ ENDIF + INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes + INTEGER(HID_T), INTENT(IN) :: attr_id + INTEGER(HID_T), INTENT(IN) :: memtype_id + INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf + END FUNCTION h5awrite_integer_5_c + END INTERFACE - hdferr = h5awrite_integer_5_c(attr_id, memtype_id, buf, dims) - END SUBROUTINE h5awrite_integer_5 + hdferr = h5awrite_integer_5_c(attr_id, memtype_id, buf, dims) + END SUBROUTINE h5awrite_integer_5 - SUBROUTINE h5awrite_integer_6(attr_id, memtype_id, buf, dims, hdferr) + SUBROUTINE h5awrite_integer_6(attr_id, memtype_id, buf, dims, hdferr) !This definition is needed for Windows DLLs !DEC$if defined(BUILD_HDF5_DLL) !DEC$attributes dllexport :: h5awrite_integer_6 !DEC$endif - IMPLICIT NONE - INTEGER(HID_T), INTENT(IN) :: attr_id ! Attribute identifier - INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype - ! identifier (in memory) - INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - INTEGER, INTENT(IN), & - DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf - ! Attribute data - INTEGER, INTENT(OUT) :: hdferr ! Error code - + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: attr_id ! Attribute identifier + INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype + ! identifier (in memory) + INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes + INTEGER, INTENT(IN), & + DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf + ! Attribute data + INTEGER, INTENT(OUT) :: hdferr ! Error code + ! INTEGER, EXTERNAL :: h5awrite_integer_6_c ! MS FORTRAN needs explicit interface for C functions called here. ! - INTERFACE - INTEGER FUNCTION h5awrite_integer_6_c(attr_id, memtype_id, buf, dims) - USE H5GLOBAL - !DEC$ IF DEFINED(HDF5F90_WINDOWS) - !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_6_C'::h5awrite_integer_6_c - !DEC$ ENDIF - INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - INTEGER(HID_T), INTENT(IN) :: attr_id - INTEGER(HID_T), INTENT(IN) :: memtype_id - INTEGER, INTENT(IN), & + INTERFACE + INTEGER FUNCTION h5awrite_integer_6_c(attr_id, memtype_id, buf, dims) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_6_C'::h5awrite_integer_6_c + !DEC$ ENDIF + INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes + INTEGER(HID_T), INTENT(IN) :: attr_id + INTEGER(HID_T), INTENT(IN) :: memtype_id + INTEGER, INTENT(IN), & DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf - END FUNCTION h5awrite_integer_6_c - END INTERFACE + END FUNCTION h5awrite_integer_6_c + END INTERFACE - hdferr = h5awrite_integer_6_c(attr_id, memtype_id, buf, dims) - END SUBROUTINE h5awrite_integer_6 + hdferr = h5awrite_integer_6_c(attr_id, memtype_id, buf, dims) + END SUBROUTINE h5awrite_integer_6 - SUBROUTINE h5awrite_integer_7(attr_id, memtype_id, buf, dims, hdferr) + SUBROUTINE h5awrite_integer_7(attr_id, memtype_id, buf, dims, hdferr) !This definition is needed for Windows DLLs !DEC$if defined(BUILD_HDF5_DLL) !DEC$attributes dllexport :: h5awrite_integer_7 !DEC$endif - IMPLICIT NONE - INTEGER(HID_T), INTENT(IN) :: attr_id ! Attribute identifier - INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype - ! identifier (in memory) - INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - INTEGER, INTENT(IN), & - DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf - ! Attribute data - INTEGER, INTENT(OUT) :: hdferr ! Error code + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: attr_id ! Attribute identifier + INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype + ! identifier (in memory) + INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes + INTEGER, INTENT(IN), & + DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf + ! Attribute data + INTEGER, INTENT(OUT) :: hdferr ! Error code ! INTEGER, EXTERNAL :: h5awrite_integer_7_c ! MS FORTRAN needs explicit interface for C functions called here. ! - INTERFACE - INTEGER FUNCTION h5awrite_integer_7_c(attr_id, memtype_id, buf, dims) - USE H5GLOBAL - !DEC$ IF DEFINED(HDF5F90_WINDOWS) - !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_7_C'::h5awrite_integer_7_c - !DEC$ ENDIF - INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - INTEGER(HID_T), INTENT(IN) :: attr_id - INTEGER(HID_T), INTENT(IN) :: memtype_id - INTEGER, INTENT(IN), & + INTERFACE + INTEGER FUNCTION h5awrite_integer_7_c(attr_id, memtype_id, buf, dims) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_7_C'::h5awrite_integer_7_c + !DEC$ ENDIF + INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes + INTEGER(HID_T), INTENT(IN) :: attr_id + INTEGER(HID_T), INTENT(IN) :: memtype_id + INTEGER, INTENT(IN), & DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf - END FUNCTION h5awrite_integer_7_c - END INTERFACE + END FUNCTION h5awrite_integer_7_c + END INTERFACE - hdferr = h5awrite_integer_7_c(attr_id, memtype_id, buf, dims) - END SUBROUTINE h5awrite_integer_7 + hdferr = h5awrite_integer_7_c(attr_id, memtype_id, buf, dims) + END SUBROUTINE h5awrite_integer_7 - SUBROUTINE h5awrite_real_scalar(attr_id, memtype_id, buf, dims, hdferr) + SUBROUTINE h5awrite_real_scalar(attr_id, memtype_id, buf, dims, hdferr) !This definition is needed for Windows DLLs !DEC$if defined(BUILD_HDF5_DLL) !DEC$attributes dllexport :: h5awrite_real_scalar !DEC$endif - IMPLICIT NONE - INTEGER(HID_T), INTENT(IN) :: attr_id ! Attribute identifier - INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype - ! identifier (in memory) - INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - REAL, INTENT(IN) :: buf ! Attribute data - INTEGER, INTENT(OUT) :: hdferr ! Error code + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: attr_id ! Attribute identifier + INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype + ! identifier (in memory) + INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes + REAL, INTENT(IN) :: buf ! Attribute data + INTEGER, INTENT(OUT) :: hdferr ! Error code ! INTEGER, EXTERNAL :: h5awrite_real_s_c ! MS FORTRAN needs explicit interface for C functions called here. ! - INTERFACE - INTEGER FUNCTION h5awrite_real_s_c(attr_id, memtype_id, buf, dims) - USE H5GLOBAL - !DEC$ IF DEFINED(HDF5F90_WINDOWS) - !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_S_C'::h5awrite_real_s_c - !DEC$ ENDIF - INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - INTEGER(HID_T), INTENT(IN) :: attr_id - INTEGER(HID_T), INTENT(IN) :: memtype_id - REAL, INTENT(IN)::buf - END FUNCTION h5awrite_real_s_c - END INTERFACE - - hdferr = h5awrite_real_s_c(attr_id, memtype_id, buf, dims) - END SUBROUTINE h5awrite_real_scalar - - SUBROUTINE h5awrite_real_1(attr_id, memtype_id, buf, dims, hdferr) + INTERFACE + INTEGER FUNCTION h5awrite_real_s_c(attr_id, memtype_id, buf, dims) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_S_C'::h5awrite_real_s_c + !DEC$ ENDIF + INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes + INTEGER(HID_T), INTENT(IN) :: attr_id + INTEGER(HID_T), INTENT(IN) :: memtype_id + REAL, INTENT(IN)::buf + END FUNCTION h5awrite_real_s_c + END INTERFACE + + hdferr = h5awrite_real_s_c(attr_id, memtype_id, buf, dims) + END SUBROUTINE h5awrite_real_scalar + + SUBROUTINE h5awrite_real_1(attr_id, memtype_id, buf, dims, hdferr) !This definition is needed for Windows DLLs !DEC$if defined(BUILD_HDF5_DLL) !DEC$attributes dllexport :: h5awrite_real_1 !DEC$endif - IMPLICIT NONE - INTEGER(HID_T), INTENT(IN) :: attr_id ! Attribute identifier - INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype - ! identifier (in memory) - INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - REAL, INTENT(IN), & - DIMENSION(dims(1)) :: buf + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: attr_id ! Attribute identifier + INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype + ! identifier (in memory) + INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes + REAL, INTENT(IN), & + DIMENSION(dims(1)) :: buf ! Attribute data - INTEGER, INTENT(OUT) :: hdferr ! Error code + INTEGER, INTENT(OUT) :: hdferr ! Error code ! INTEGER, EXTERNAL :: h5awrite_real_1_c ! MS FORTRAN needs explicit interface for C functions called here. ! - INTERFACE - INTEGER FUNCTION h5awrite_real_1_c(attr_id, memtype_id, buf, dims) - USE H5GLOBAL - !DEC$ IF DEFINED(HDF5F90_WINDOWS) - !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_1_C'::h5awrite_real_1_c - !DEC$ ENDIF - INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - INTEGER(HID_T), INTENT(IN) :: attr_id - INTEGER(HID_T), INTENT(IN) :: memtype_id - REAL, INTENT(IN), & + INTERFACE + INTEGER FUNCTION h5awrite_real_1_c(attr_id, memtype_id, buf, dims) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_1_C'::h5awrite_real_1_c + !DEC$ ENDIF + INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes + INTEGER(HID_T), INTENT(IN) :: attr_id + INTEGER(HID_T), INTENT(IN) :: memtype_id + REAL, INTENT(IN), & DIMENSION(dims(1)) :: buf - END FUNCTION h5awrite_real_1_c - END INTERFACE + END FUNCTION h5awrite_real_1_c + END INTERFACE - hdferr = h5awrite_real_1_c(attr_id, memtype_id, buf, dims) - END SUBROUTINE h5awrite_real_1 + hdferr = h5awrite_real_1_c(attr_id, memtype_id, buf, dims) + END SUBROUTINE h5awrite_real_1 SUBROUTINE h5awrite_real_2(attr_id, memtype_id, buf, dims, hdferr) @@ -1463,6 +1463,11 @@ ! dims parameter was added to make code portable; ! Aprile 4, 2001 ! +! Changed buf intent to INOUT to be consistant +! with how the C functions handles it. The pg +! compiler will return 0 if a buf value is not set. +! February, 2008 +! ! Comment: This function is overloaded to write INTEGER, ! REAL, DOUBLE PRECISION and CHARACTER buffers ! up to 7 dimensions. @@ -1478,7 +1483,7 @@ INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype ! identifier (in memory) INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - INTEGER, INTENT(OUT) :: buf ! Attribute data + INTEGER, INTENT(INOUT) :: buf ! Attribute data INTEGER, INTENT(OUT) :: hdferr ! Error code ! INTEGER, EXTERNAL :: h5aread_integer_s_c @@ -1490,13 +1495,12 @@ !DEC$ IF DEFINED(HDF5F90_WINDOWS) !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_S_C'::h5aread_integer_s_c !DEC$ ENDIF - INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes + INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes INTEGER(HID_T), INTENT(IN) :: attr_id INTEGER(HID_T), INTENT(IN) :: memtype_id - INTEGER, INTENT(OUT)::buf + INTEGER, INTENT(INOUT)::buf END FUNCTION h5aread_integer_s_c END INTERFACE - hdferr = h5aread_integer_s_c(attr_id, memtype_id, buf, dims) END SUBROUTINE h5aread_integer_scalar @@ -1510,8 +1514,7 @@ INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype ! identifier (in memory) INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - INTEGER, INTENT(OUT), & - DIMENSION(dims(1)) :: buf + INTEGER, INTENT(INOUT), DIMENSION(dims(1)) :: buf INTEGER, INTENT(OUT) :: hdferr ! Error code ! INTEGER, EXTERNAL :: h5aread_integer_1_c @@ -1526,8 +1529,7 @@ INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes INTEGER(HID_T), INTENT(IN) :: attr_id INTEGER(HID_T), INTENT(IN) :: memtype_id - INTEGER, INTENT(OUT), & - DIMENSION(dims(1)) :: buf + INTEGER, INTENT(INOUT), DIMENSION(dims(1)) :: buf END FUNCTION h5aread_integer_1_c END INTERFACE @@ -1545,8 +1547,7 @@ INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype ! identifier (in memory) INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - INTEGER, INTENT(OUT), & - DIMENSION(dims(1),dims(2)) :: buf + INTEGER, INTENT(INOUT),DIMENSION(dims(1),dims(2)) :: buf INTEGER, INTENT(OUT) :: hdferr ! Error code ! INTEGER, EXTERNAL :: h5aread_integer_2_c @@ -1561,8 +1562,7 @@ INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes INTEGER(HID_T), INTENT(IN) :: attr_id INTEGER(HID_T), INTENT(IN) :: memtype_id - INTEGER, INTENT(OUT), & - DIMENSION(dims(1),dims(2)) :: buf + INTEGER, INTENT(INOUT), DIMENSION(dims(1),dims(2)) :: buf END FUNCTION h5aread_integer_2_c END INTERFACE @@ -1580,8 +1580,8 @@ INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype ! identifier (in memory) INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - INTEGER, INTENT(OUT), & - DIMENSION(dims(1),dims(2),dims(3)) :: buf + INTEGER, INTENT(INOUT), & + DIMENSION(dims(1),dims(2),dims(3)) :: buf INTEGER, INTENT(OUT) :: hdferr ! Error code ! INTEGER, EXTERNAL :: h5aread_integer_3_c @@ -1596,7 +1596,7 @@ INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes INTEGER(HID_T), INTENT(IN) :: attr_id INTEGER(HID_T), INTENT(IN) :: memtype_id - INTEGER, INTENT(OUT), & + INTEGER, INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3)) :: buf END FUNCTION h5aread_integer_3_c END INTERFACE @@ -1615,7 +1615,7 @@ INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype ! identifier (in memory) INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - INTEGER, INTENT(OUT), & + INTEGER, INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf ! Attribute data INTEGER, INTENT(OUT) :: hdferr ! Error code @@ -1632,7 +1632,7 @@ INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes INTEGER(HID_T), INTENT(IN) :: attr_id INTEGER(HID_T), INTENT(IN) :: memtype_id - INTEGER, INTENT(OUT), & + INTEGER, INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf END FUNCTION h5aread_integer_4_c END INTERFACE @@ -1651,7 +1651,7 @@ INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype ! identifier (in memory) INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - INTEGER, INTENT(OUT), & + INTEGER, INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf ! Attribute data INTEGER, INTENT(OUT) :: hdferr ! Error code @@ -1668,7 +1668,7 @@ INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes INTEGER(HID_T), INTENT(IN) :: attr_id INTEGER(HID_T), INTENT(IN) :: memtype_id - INTEGER, INTENT(OUT), & + INTEGER, INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf END FUNCTION h5aread_integer_5_c END INTERFACE @@ -1687,7 +1687,7 @@ INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype ! identifier (in memory) INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - INTEGER, INTENT(OUT), & + INTEGER, INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf ! Attribute data INTEGER, INTENT(OUT) :: hdferr ! Error code @@ -1704,7 +1704,7 @@ INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes INTEGER(HID_T), INTENT(IN) :: attr_id INTEGER(HID_T), INTENT(IN) :: memtype_id - INTEGER, INTENT(OUT), & + INTEGER, INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf END FUNCTION h5aread_integer_6_c END INTERFACE @@ -1723,7 +1723,7 @@ INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype ! identifier (in memory) INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - INTEGER, INTENT(OUT), & + INTEGER, INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf ! Attribute data INTEGER, INTENT(OUT) :: hdferr ! Error code @@ -1740,7 +1740,7 @@ INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes INTEGER(HID_T), INTENT(IN) :: attr_id INTEGER(HID_T), INTENT(IN) :: memtype_id - INTEGER, INTENT(OUT), & + INTEGER, INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf END FUNCTION h5aread_integer_7_c END INTERFACE @@ -1759,7 +1759,7 @@ INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype ! identifier (in memory) INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - REAL, INTENT(OUT) :: buf ! Attribute data + REAL, INTENT(INOUT) :: buf ! Attribute data INTEGER, INTENT(OUT) :: hdferr ! Error code ! INTEGER, EXTERNAL :: h5aread_real_s_c @@ -1774,7 +1774,7 @@ INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes INTEGER(HID_T), INTENT(IN) :: attr_id INTEGER(HID_T), INTENT(IN) :: memtype_id - REAL, INTENT(OUT)::buf + REAL, INTENT(INOUT)::buf END FUNCTION h5aread_real_s_c END INTERFACE @@ -1791,7 +1791,7 @@ INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype ! identifier (in memory) INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - REAL, INTENT(OUT), & + REAL, INTENT(INOUT), & DIMENSION(dims(1)) :: buf ! Attribute data INTEGER, INTENT(OUT) :: hdferr ! Error code @@ -1808,7 +1808,7 @@ INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes INTEGER(HID_T), INTENT(IN) :: attr_id INTEGER(HID_T), INTENT(IN) :: memtype_id - REAL, INTENT(OUT), & + REAL, INTENT(INOUT), & DIMENSION(dims(1)) :: buf END FUNCTION h5aread_real_1_c END INTERFACE @@ -1827,7 +1827,7 @@ INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype ! identifier (in memory) INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - REAL, INTENT(OUT), & + REAL, INTENT(INOUT), & DIMENSION(dims(1),dims(2)) :: buf ! Attribute data INTEGER, INTENT(OUT) :: hdferr ! Error code @@ -1844,7 +1844,7 @@ INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes INTEGER(HID_T), INTENT(IN) :: attr_id INTEGER(HID_T), INTENT(IN) :: memtype_id - REAL, INTENT(OUT), & + REAL, INTENT(INOUT), & DIMENSION(dims(1),dims(2)) :: buf END FUNCTION h5aread_real_2_c END INTERFACE @@ -1863,7 +1863,7 @@ INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype ! identifier (in memory) INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - REAL, INTENT(OUT), & + REAL, INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3)) :: buf ! Attribute data INTEGER, INTENT(OUT) :: hdferr ! Error code @@ -1880,7 +1880,7 @@ INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes INTEGER(HID_T), INTENT(IN) :: attr_id INTEGER(HID_T), INTENT(IN) :: memtype_id - REAL, INTENT(OUT), & + REAL, INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3)) :: buf END FUNCTION h5aread_real_3_c END INTERFACE @@ -1899,7 +1899,7 @@ INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype ! identifier (in memory) INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - REAL, INTENT(OUT), & + REAL, INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf ! Attribute data INTEGER, INTENT(OUT) :: hdferr ! Error code @@ -1916,7 +1916,7 @@ INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes INTEGER(HID_T), INTENT(IN) :: attr_id INTEGER(HID_T), INTENT(IN) :: memtype_id - REAL, INTENT(OUT), & + REAL, INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf END FUNCTION h5aread_real_4_c END INTERFACE @@ -1935,7 +1935,7 @@ INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype ! identifier (in memory) INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - REAL, INTENT(OUT), & + REAL, INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf ! Attribute data INTEGER, INTENT(OUT) :: hdferr ! Error code @@ -1952,7 +1952,7 @@ INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes INTEGER(HID_T), INTENT(IN) :: attr_id INTEGER(HID_T), INTENT(IN) :: memtype_id - REAL, INTENT(OUT), & + REAL, INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf END FUNCTION h5aread_real_5_c END INTERFACE @@ -1971,7 +1971,7 @@ INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype ! identifier (in memory) INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - REAL, INTENT(OUT), & + REAL, INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf ! Attribute data INTEGER, INTENT(OUT) :: hdferr ! Error code @@ -1988,7 +1988,7 @@ INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes INTEGER(HID_T), INTENT(IN) :: attr_id INTEGER(HID_T), INTENT(IN) :: memtype_id - REAL, INTENT(OUT), & + REAL, INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf END FUNCTION h5aread_real_6_c END INTERFACE @@ -2007,7 +2007,7 @@ INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype ! identifier (in memory) INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - REAL, INTENT(OUT), & + REAL, INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf ! Attribute data INTEGER, INTENT(OUT) :: hdferr ! Error code @@ -2024,7 +2024,7 @@ INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes INTEGER(HID_T), INTENT(IN) :: attr_id INTEGER(HID_T), INTENT(IN) :: memtype_id - REAL, INTENT(OUT), & + REAL, INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf END FUNCTION h5aread_real_7_c END INTERFACE @@ -2043,7 +2043,7 @@ INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype ! identifier (in memory) INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - DOUBLE PRECISION, INTENT(OUT) :: buf ! Attribute data + DOUBLE PRECISION, INTENT(INOUT) :: buf ! Attribute data INTEGER, INTENT(OUT) :: hdferr ! Error code ! INTEGER, EXTERNAL :: h5aread_double_s_c @@ -2058,7 +2058,7 @@ INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes INTEGER(HID_T), INTENT(IN) :: attr_id INTEGER(HID_T), INTENT(IN) :: memtype_id - DOUBLE PRECISION, INTENT(OUT)::buf + DOUBLE PRECISION, INTENT(INOUT)::buf END FUNCTION h5aread_double_s_c END INTERFACE @@ -2075,7 +2075,7 @@ INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype ! identifier (in memory) INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - DOUBLE PRECISION, INTENT(OUT), & + DOUBLE PRECISION, INTENT(INOUT), & DIMENSION(dims(1)) :: buf ! Attribute data INTEGER, INTENT(OUT) :: hdferr ! Error code @@ -2092,7 +2092,7 @@ INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes INTEGER(HID_T), INTENT(IN) :: attr_id INTEGER(HID_T), INTENT(IN) :: memtype_id - DOUBLE PRECISION, INTENT(OUT), & + DOUBLE PRECISION, INTENT(INOUT), & DIMENSION(dims(1)) :: buf END FUNCTION h5aread_double_1_c END INTERFACE @@ -2111,7 +2111,7 @@ INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype ! identifier (in memory) INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - DOUBLE PRECISION, INTENT(OUT), & + DOUBLE PRECISION, INTENT(INOUT), & DIMENSION(dims(1),dims(2)) :: buf ! Attribute data INTEGER, INTENT(OUT) :: hdferr ! Error code @@ -2128,7 +2128,7 @@ INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes INTEGER(HID_T), INTENT(IN) :: attr_id INTEGER(HID_T), INTENT(IN) :: memtype_id - DOUBLE PRECISION, INTENT(OUT), & + DOUBLE PRECISION, INTENT(INOUT), & DIMENSION(dims(1),dims(2)) :: buf END FUNCTION h5aread_double_2_c END INTERFACE @@ -2147,7 +2147,7 @@ INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype ! identifier (in memory) INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - DOUBLE PRECISION, INTENT(OUT), & + DOUBLE PRECISION, INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3)) :: buf ! Attribute data INTEGER, INTENT(OUT) :: hdferr ! Error code @@ -2164,7 +2164,7 @@ INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes INTEGER(HID_T), INTENT(IN) :: attr_id INTEGER(HID_T), INTENT(IN) :: memtype_id - DOUBLE PRECISION, INTENT(OUT), & + DOUBLE PRECISION, INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3)) :: buf END FUNCTION h5aread_double_3_c END INTERFACE @@ -2183,7 +2183,7 @@ INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype ! identifier (in memory) INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - DOUBLE PRECISION, INTENT(OUT), & + DOUBLE PRECISION, INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf ! Attribute data INTEGER, INTENT(OUT) :: hdferr ! Error code @@ -2200,7 +2200,7 @@ INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes INTEGER(HID_T), INTENT(IN) :: attr_id INTEGER(HID_T), INTENT(IN) :: memtype_id - DOUBLE PRECISION, INTENT(OUT), & + DOUBLE PRECISION, INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf END FUNCTION h5aread_double_4_c END INTERFACE @@ -2219,7 +2219,7 @@ INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype ! identifier (in memory) INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - DOUBLE PRECISION, INTENT(OUT), & + DOUBLE PRECISION, INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf ! Attribute data INTEGER, INTENT(OUT) :: hdferr ! Error code @@ -2236,7 +2236,7 @@ INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes INTEGER(HID_T), INTENT(IN) :: attr_id INTEGER(HID_T), INTENT(IN) :: memtype_id - DOUBLE PRECISION, INTENT(OUT), & + DOUBLE PRECISION, INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf END FUNCTION h5aread_double_5_c END INTERFACE @@ -2255,7 +2255,7 @@ INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype ! identifier (in memory) INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - DOUBLE PRECISION, INTENT(OUT), & + DOUBLE PRECISION, INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf ! Attribute data INTEGER, INTENT(OUT) :: hdferr ! Error code @@ -2272,7 +2272,7 @@ INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes INTEGER(HID_T), INTENT(IN) :: attr_id INTEGER(HID_T), INTENT(IN) :: memtype_id - DOUBLE PRECISION, INTENT(OUT), & + DOUBLE PRECISION, INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf END FUNCTION h5aread_double_6_c END INTERFACE @@ -2291,7 +2291,7 @@ INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype ! identifier (in memory) INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - DOUBLE PRECISION, INTENT(OUT), & + DOUBLE PRECISION, INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf ! Attribute data INTEGER, INTENT(OUT) :: hdferr ! Error code @@ -2308,7 +2308,7 @@ INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes INTEGER(HID_T), INTENT(IN) :: attr_id INTEGER(HID_T), INTENT(IN) :: memtype_id - DOUBLE PRECISION, INTENT(OUT), & + DOUBLE PRECISION, INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf END FUNCTION h5aread_double_7_c END INTERFACE @@ -2327,7 +2327,7 @@ INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype ! identifier (in memory) INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - CHARACTER(LEN=*), INTENT(OUT) :: buf + CHARACTER(LEN=*), INTENT(INOUT) :: buf ! Attribute data INTEGER, INTENT(OUT) :: hdferr ! Error code @@ -2344,7 +2344,7 @@ INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes INTEGER(HID_T), INTENT(IN) :: attr_id INTEGER(HID_T), INTENT(IN) :: memtype_id - CHARACTER(LEN=*) :: buf + CHARACTER(LEN=*), INTENT(INOUT) :: buf END FUNCTION h5areadc_s_c END INTERFACE @@ -2361,7 +2361,7 @@ INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype ! identifier (in memory) INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - CHARACTER(LEN=*), INTENT(OUT), & + CHARACTER(LEN=*), INTENT(INOUT), & DIMENSION(dims(1)) :: buf ! Attribute data INTEGER, INTENT(OUT) :: hdferr ! Error code @@ -2379,8 +2379,8 @@ INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes INTEGER(HID_T), INTENT(IN) :: attr_id INTEGER(HID_T), INTENT(IN) :: memtype_id - CHARACTER(LEN=*), INTENT(OUT), & - DIMENSION(dims(1)) :: buf + CHARACTER(LEN=*), INTENT(INOUT), & + DIMENSION(dims(1)) :: buf END FUNCTION h5areadc_1_c END INTERFACE @@ -2398,8 +2398,8 @@ INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype ! identifier (in memory) INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - CHARACTER(LEN=*), INTENT(OUT), & - DIMENSION(dims(1),dims(2)) :: buf + CHARACTER(LEN=*), INTENT(INOUT), & + DIMENSION(dims(1),dims(2)) :: buf ! Attribute data INTEGER, INTENT(OUT) :: hdferr ! Error code @@ -2416,7 +2416,7 @@ INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes INTEGER(HID_T), INTENT(IN) :: attr_id INTEGER(HID_T), INTENT(IN) :: memtype_id - CHARACTER(LEN=*), INTENT(OUT), & + CHARACTER(LEN=*), INTENT(INOUT), & DIMENSION(dims(1),dims(2)) :: buf END FUNCTION h5areadc_2_c END INTERFACE @@ -2435,7 +2435,7 @@ INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype ! identifier (in memory) INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - CHARACTER(LEN=*), INTENT(OUT), & + CHARACTER(LEN=*), INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3)) :: buf ! Attribute data INTEGER, INTENT(OUT) :: hdferr ! Error code @@ -2453,7 +2453,7 @@ INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes INTEGER(HID_T), INTENT(IN) :: attr_id INTEGER(HID_T), INTENT(IN) :: memtype_id - CHARACTER(LEN=*), INTENT(OUT), & + CHARACTER(LEN=*), INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3)) :: buf END FUNCTION h5areadc_3_c END INTERFACE @@ -2472,7 +2472,7 @@ INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype ! identifier (in memory) INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - CHARACTER(LEN=*), INTENT(OUT), & + CHARACTER(LEN=*), INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf ! Attribute data INTEGER, INTENT(OUT) :: hdferr ! Error code @@ -2490,7 +2490,7 @@ INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes INTEGER(HID_T), INTENT(IN) :: attr_id INTEGER(HID_T), INTENT(IN) :: memtype_id - CHARACTER(LEN=*), INTENT(OUT), & + CHARACTER(LEN=*), INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf END FUNCTION h5areadc_4_c END INTERFACE @@ -2509,7 +2509,7 @@ INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype ! identifier (in memory) INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - CHARACTER(LEN=*), INTENT(OUT), & + CHARACTER(LEN=*), INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf ! Attribute data INTEGER, INTENT(OUT) :: hdferr ! Error code @@ -2527,7 +2527,7 @@ INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes INTEGER(HID_T), INTENT(IN) :: attr_id INTEGER(HID_T), INTENT(IN) :: memtype_id - CHARACTER(LEN=*), INTENT(OUT), & + CHARACTER(LEN=*), INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf END FUNCTION h5areadc_5_c END INTERFACE @@ -2546,7 +2546,7 @@ INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype ! identifier (in memory) INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - CHARACTER(LEN=*), INTENT(OUT), & + CHARACTER(LEN=*), INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf ! Attribute data INTEGER, INTENT(OUT) :: hdferr ! Error code @@ -2564,7 +2564,7 @@ INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes INTEGER(HID_T), INTENT(IN) :: attr_id INTEGER(HID_T), INTENT(IN) :: memtype_id - CHARACTER(LEN=*), INTENT(OUT), & + CHARACTER(LEN=*), INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf END FUNCTION h5areadc_6_c END INTERFACE @@ -2583,7 +2583,7 @@ INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype ! identifier (in memory) INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes - CHARACTER(LEN=*), INTENT(OUT), & + CHARACTER(LEN=*), INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf ! Attribute data INTEGER, INTENT(OUT) :: hdferr ! Error code @@ -2601,7 +2601,7 @@ INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes INTEGER(HID_T), INTENT(IN) :: attr_id INTEGER(HID_T), INTENT(IN) :: memtype_id - CHARACTER(LEN=*), INTENT(OUT), & + CHARACTER(LEN=*), INTENT(INOUT), & DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf END FUNCTION h5areadc_7_c END INTERFACE @@ -2740,37 +2740,147 @@ !---------------------------------------------------------------------- - SUBROUTINE h5aget_name_f(attr_id, size, buf, hdferr) + SUBROUTINE h5aget_name_f(attr_id, size, buf, hdferr) !This definition is needed for Windows DLLs !DEC$if defined(BUILD_HDF5_DLL) !DEC$attributes dllexport :: h5aget_name_f !DEC$endif - IMPLICIT NONE - INTEGER(HID_T), INTENT(IN) :: attr_id ! Attribute identifier - INTEGER(SIZE_T), INTENT(IN) :: size ! Buffer size - CHARACTER(LEN=*), INTENT(INOUT) :: buf - ! Buffer to hold attribute name - INTEGER, INTENT(OUT) :: hdferr ! Error code: - ! name length is successful, - ! -1 if fail -! INTEGER, EXTERNAL :: h5aget_name_c + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: attr_id ! Attribute identifier + INTEGER(SIZE_T), INTENT(IN) :: size ! Buffer size + CHARACTER(LEN=*), INTENT(INOUT) :: buf + ! Buffer to hold attribute name + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! name length is successful, + ! -1 if fail + ! MS FORTRAN needs explicit interface for C functions called here. ! - INTERFACE - INTEGER FUNCTION h5aget_name_c(attr_id, size, buf) - USE H5GLOBAL - !DEC$ IF DEFINED(HDF5F90_WINDOWS) - !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AGET_NAME_C'::h5aget_name_c - !DEC$ ENDIF - !DEC$ATTRIBUTES reference :: buf - INTEGER(HID_T), INTENT(IN) :: attr_id - INTEGER(SIZE_T), INTENT(IN) :: size - CHARACTER(LEN=*), INTENT(OUT) :: buf - END FUNCTION h5aget_name_c - END INTERFACE + INTERFACE + INTEGER FUNCTION h5aget_name_c(attr_id, size, buf) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AGET_NAME_C'::h5aget_name_c + !DEC$ ENDIF + !DEC$ATTRIBUTES reference :: buf + INTEGER(HID_T), INTENT(IN) :: attr_id + INTEGER(SIZE_T), INTENT(IN) :: size + CHARACTER(LEN=*), INTENT(OUT) :: buf + END FUNCTION h5aget_name_c + END INTERFACE + + hdferr = h5aget_name_c(attr_id, size, buf) + END SUBROUTINE h5aget_name_f - hdferr = h5aget_name_c(attr_id, size, buf) - END SUBROUTINE h5aget_name_f +!---------------------------------------------------------------------- +! Name: h5aget_name_by_idx_f +! +! Purpose: Gets an attribute name, by attribute index position. +! +! Inputs: +! loc_id - Location of object to which attribute is attached +! obj_name - Name of object to which attribute is attached, relative to location +! idx_type - Type of index; Possible values are: +! +! H5_INDEX_UNKNOWN_F = -1 - Unknown index type +! H5_INDEX_NAME_F - Index on names +! H5_INDEX_CRT_ORDER_F - Index on creation order +! H5_INDEX_N _F - Number of indices defined +! +! order - Order in which to iterate over index; Possible values are: +! +! H5_ITER_UNKNOWN_F - Unknown order +! H5_ITER_INC_F - Increasing order +! H5_ITER_DEC_F - Decreasing order +! H5_ITER_NATIVE_F - No particular order, whatever is fastest +! H5_ITER_N_F - Number of iteration orders +! +! order - Index traversal order +! n - Attribute’s position in index +! size - Size, in bytes, of attribute name +! +! Outputs: +! name - Attribute name +! name_size_out - Size of Attribute name returned from function +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! lapl_id - Link access property list +! +! Programmer: M.S. Breitenfeld +! January, 2008 +! +! Modifications: N/A +!---------------------------------------------------------------------- + + SUBROUTINE h5aget_name_by_idx_f(loc_id, obj_name, idx_type, order, & + n, name, size, hdferr, lapl_id) +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5aget_name_by_idx_f +!DEC$endif + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id ! Identifer for object to which attribute is attached + CHARACTER(LEN=*), INTENT(IN) :: obj_name ! Name of object, relative to location, + ! from which attribute is to be removed *TEST* check NULL + INTEGER, INTENT(IN) :: idx_type ! Type of index; Possible values are: + ! H5_INDEX_UNKNOWN_F - Unknown index type + ! H5_INDEX_NAME_F - Index on names + ! H5_INDEX_CRT_ORDER_F - Index on creation order + ! H5_INDEX_N_F - Number of indices defined + + INTEGER, INTENT(IN) :: order ! Order in which to iterate over index; Possible values are: + ! H5_ITER_UNKNOWN_F - Unknown order + ! H5_ITER_INC_F - Increasing order + ! H5_ITER_DEC_F - Decreasing order + ! H5_ITER_NATIVE_F - No particular order, whatever is fastest + ! H5_ITER_N_F - Number of iteration orders + + INTEGER(HSIZE_T), INTENT(IN) :: n ! Attribute’s position in index + + CHARACTER(LEN=*), INTENT(OUT) :: name ! Attribute name + + INTEGER(SIZE_T), INTENT(INOUT) :: size ! Buffer size ! *TEST* check for 0 value *CHECK* should this return the correct value + + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! Returns attribute name size, + ! -1 if fail + INTEGER(SIZE_T) :: obj_namelen + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list + INTEGER(HID_T) :: lapl_id_default +! +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5aget_name_by_idx_c(loc_id, obj_name, obj_namelen, idx_type, order, & + n, name, size, lapl_id_default) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AGET_NAME_BY_IDX_C'::h5aget_name_by_idx_c + !DEC$ ENDIF + + INTEGER(HID_T), INTENT(IN) :: loc_id + CHARACTER(LEN=*), INTENT(IN) :: obj_name + INTEGER, INTENT(IN) :: idx_type + INTEGER, INTENT(IN) :: order + INTEGER(HSIZE_T), INTENT(IN) :: n + + CHARACTER(LEN=*), INTENT(OUT) :: name + INTEGER(SIZE_T), INTENT(INOUT) :: size + INTEGER(HID_T) :: lapl_id_default + INTEGER(SIZE_T) :: obj_namelen + END FUNCTION h5aget_name_by_idx_c + END INTERFACE + + obj_namelen = LEN(obj_name) + lapl_id_default = H5P_DEFAULT_F + IF(PRESENT(lapl_id)) lapl_id_default = lapl_id + + hdferr = h5aget_name_by_idx_c(loc_id, obj_name, obj_namelen, idx_type, order, & + n, name, size, lapl_id_default) + + END SUBROUTINE h5aget_name_by_idx_f !---------------------------------------------------------------------- @@ -2798,33 +2908,33 @@ ! !---------------------------------------------------------------------- - SUBROUTINE h5aget_num_attrs_f(obj_id, attr_num, hdferr) + SUBROUTINE h5aget_num_attrs_f(obj_id, attr_num, hdferr) !This definition is needed for Windows DLLs !DEC$if defined(BUILD_HDF5_DLL) !DEC$attributes dllexport :: h5aget_num_attrs_f !DEC$endif - IMPLICIT NONE - INTEGER(HID_T), INTENT(IN) :: obj_id ! Object identifier - INTEGER, INTENT(OUT) :: attr_num ! Number of attributes of the - ! object - INTEGER, INTENT(OUT) :: hdferr ! Error code + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: obj_id ! Object identifier + INTEGER, INTENT(OUT) :: attr_num ! Number of attributes of the + ! object + INTEGER, INTENT(OUT) :: hdferr ! Error code ! INTEGER, EXTERNAL :: h5aget_num_attrs_c ! MS FORTRAN needs explicit interface for C functions called here. ! - INTERFACE - INTEGER FUNCTION h5aget_num_attrs_c(obj_id, attr_num) - USE H5GLOBAL - !DEC$ IF DEFINED(HDF5F90_WINDOWS) - !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AGET_NUM_ATTRS_C'::h5aget_num_attrs_c - !DEC$ ENDIF - INTEGER(HID_T), INTENT(IN) :: obj_id - INTEGER, INTENT(OUT) :: attr_num - END FUNCTION h5aget_num_attrs_c - END INTERFACE - - hdferr = h5aget_num_attrs_c(obj_id, attr_num) - END SUBROUTINE h5aget_num_attrs_f + INTERFACE + INTEGER FUNCTION h5aget_num_attrs_c(obj_id, attr_num) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AGET_NUM_ATTRS_C'::h5aget_num_attrs_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: obj_id + INTEGER, INTENT(OUT) :: attr_num + END FUNCTION h5aget_num_attrs_c + END INTERFACE + + hdferr = h5aget_num_attrs_c(obj_id, attr_num) + END SUBROUTINE h5aget_num_attrs_f !---------------------------------------------------------------------- ! Name: h5adelete_f @@ -2852,36 +2962,36 @@ ! !---------------------------------------------------------------------- - SUBROUTINE h5adelete_f(obj_id, name, hdferr) + SUBROUTINE h5adelete_f(obj_id, name, hdferr) !This definition is needed for Windows DLLs !DEC$if defined(BUILD_HDF5_DLL) !DEC$attributes dllexport :: h5adelete_f !DEC$endif - IMPLICIT NONE - INTEGER(HID_T), INTENT(IN) :: obj_id ! Object identifier - CHARACTER(LEN=*), INTENT(IN) :: name ! Attribute name - INTEGER, INTENT(OUT) :: hdferr ! Error code - INTEGER(SIZE_T) :: namelen + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: obj_id ! Object identifier + CHARACTER(LEN=*), INTENT(IN) :: name ! Attribute name + INTEGER, INTENT(OUT) :: hdferr ! Error code + INTEGER(SIZE_T) :: namelen ! INTEGER, EXTERNAL :: h5adelete_c ! MS FORTRAN needs explicit interface for C functions called here. ! - INTERFACE - INTEGER FUNCTION h5adelete_c(obj_id, name, namelen) - USE H5GLOBAL - !DEC$ IF DEFINED(HDF5F90_WINDOWS) - !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5ADELETE_C'::h5adelete_c - !DEC$ ENDIF - !DEC$ATTRIBUTES reference :: name - INTEGER(HID_T), INTENT(IN) :: obj_id - CHARACTER(LEN=*), INTENT(IN) :: name - INTEGER(SIZE_T) :: namelen - END FUNCTION h5adelete_c - END INTERFACE - - namelen = LEN(name) - hdferr = h5adelete_c(obj_id, name, namelen) - END SUBROUTINE h5adelete_f + INTERFACE + INTEGER FUNCTION h5adelete_c(obj_id, name, namelen) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5ADELETE_C'::h5adelete_c + !DEC$ ENDIF + !DEC$ATTRIBUTES reference :: name + INTEGER(HID_T), INTENT(IN) :: obj_id + CHARACTER(LEN=*), INTENT(IN) :: name + INTEGER(SIZE_T) :: namelen + END FUNCTION h5adelete_c + END INTERFACE + + namelen = LEN(name) + hdferr = h5adelete_c(obj_id, name, namelen) + END SUBROUTINE h5adelete_f !---------------------------------------------------------------------- ! Name: h5aclose_f @@ -2907,29 +3017,1177 @@ ! !---------------------------------------------------------------------- - SUBROUTINE h5aclose_f(attr_id, hdferr) + SUBROUTINE h5aclose_f(attr_id, hdferr) !This definition is needed for Windows DLLs !DEC$if defined(BUILD_HDF5_DLL) !DEC$attributes dllexport :: h5aclose_f !DEC$endif - IMPLICIT NONE - INTEGER(HID_T), INTENT(IN) :: attr_id ! Attribute identifier - INTEGER, INTENT(OUT) :: hdferr ! Error code: + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: attr_id ! Attribute identifier + INTEGER, INTENT(OUT) :: hdferr ! Error code: ! INTEGER, EXTERNAL :: h5aclose_c ! MS FORTRAN needs explicit interface for C functions called here. ! - INTERFACE - INTEGER FUNCTION h5aclose_c(attr_id) - USE H5GLOBAL - !DEC$ IF DEFINED(HDF5F90_WINDOWS) - !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5ACLOSE_C'::h5aclose_c - !DEC$ ENDIF - INTEGER(HID_T), INTENT(IN) :: attr_id - END FUNCTION h5aclose_c - END INTERFACE + INTERFACE + INTEGER FUNCTION h5aclose_c(attr_id) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5ACLOSE_C'::h5aclose_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: attr_id + END FUNCTION h5aclose_c + END INTERFACE + + hdferr = h5aclose_c(attr_id) + END SUBROUTINE h5aclose_f + +!---------------------------------------------------------------------- +! Name: h5aget_storage_size_f +! +! Purpose: Returns the amount of storage required for an attribute. +! +! Inputs: +! attr_id - attribute identifier +! Outputs: +! size - attribute storage size +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M. S. Breitenfeld +! January, 2008 +! +! Modifications: N/A +! +!---------------------------------------------------------------------- + + SUBROUTINE h5aget_storage_size_f(attr_id, size, hdferr) +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5aget_storage_size_f +!DEC$endif + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: attr_id ! Attribute identifier + INTEGER(HSIZE_T), INTENT(OUT) :: size ! Attribute storage requirement + INTEGER, INTENT(OUT) :: hdferr ! Error code + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5aget_storage_size_c(attr_id, size) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AGET_STORAGE_SIZE_C'::h5aget_storage_size_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: attr_id + INTEGER(HSIZE_T), INTENT(OUT) :: size + END FUNCTION h5aget_storage_size_c + END INTERFACE + + hdferr = h5aget_storage_size_c(attr_id, size) + END SUBROUTINE h5aget_storage_size_f + +!---------------------------------------------------------------------- +! Name: h5aget_create_plist_f +! +! Purpose: Gets an attribute creation property list identifier +! +! Inputs: +! attr_id - Identifier of the attribute +! Outputs: +! creation_prop_id - Identifier for the attribute’s creation property +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M. S. Breitenfeld +! January, 2008 +! +! Modifications: N/A +! +!---------------------------------------------------------------------- + + SUBROUTINE h5aget_create_plist_f(attr_id, creation_prop_id, hdferr) +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5aget_create_plist_f +!DEC$endif + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: attr_id ! Identifier of the attribute + INTEGER(HID_T), INTENT(OUT) :: creation_prop_id ! Identifier for the attribute’s creation property + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! 0 on success and -1 on failure + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5aget_create_plist_c(attr_id, creation_prop_id) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AGET_CREATE_PLIST_C'::h5aget_create_plist_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: attr_id + INTEGER(HID_T), INTENT(OUT) :: creation_prop_id + END FUNCTION h5aget_create_plist_c + END INTERFACE + + hdferr = h5aget_create_plist_c(attr_id, creation_prop_id) + END SUBROUTINE h5aget_create_plist_f + +!---------------------------------------------------------------------- +! Name: h5arename_by_name_f +! +! Purpose: Renames an attribute +! +! Inputs: +! loc_id - Location or object identifier; may be dataset or group +! obj_name - Name of object, relative to location, +! whose attribute is to be renamed +! old_attr_name - Prior attribute name +! new_attr_name - New attribute name +! lapl_id - Link access property list identifier +! +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! +! Programmer: M.S. Breitenfeld +! January, 2008 +! +! Modifications: N/A +! +!---------------------------------------------------------------------- + + SUBROUTINE h5arename_by_name_f(loc_id, obj_name, old_attr_name, new_attr_name, & + hdferr, lapl_id) + +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5arename_by_name_f +!DEC$endif + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id ! Object identifier + CHARACTER(LEN=*), INTENT(IN) :: obj_name ! Name of object, relative to location, + ! whose attribute is to be renamed + CHARACTER(LEN=*), INTENT(IN) :: old_attr_name ! Prior attribute name + CHARACTER(LEN=*), INTENT(IN) :: new_attr_name ! New attribute name + + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! 0 on success and -1 on failure + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list identifier + + INTEGER(HID_T) :: lapl_id_default + INTEGER(SIZE_T) :: obj_namelen + INTEGER(SIZE_T) :: old_attr_namelen + INTEGER(SIZE_T) :: new_attr_namelen + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5arename_by_name_c(loc_id, obj_name, obj_namelen, & + old_attr_name, old_attr_namelen, new_attr_name, new_attr_namelen, & + lapl_id_default) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5ARENAME_BY_NAME_C'::h5arename_by_name_c + !DEC$ ENDIF + !DEC$ATTRIBUTES reference :: name + INTEGER(HID_T), INTENT(IN) :: loc_id + CHARACTER(LEN=*), INTENT(IN) :: obj_name + INTEGER(SIZE_T) :: obj_namelen + CHARACTER(LEN=*), INTENT(IN) :: old_attr_name + INTEGER(SIZE_T) :: old_attr_namelen + CHARACTER(LEN=*), INTENT(IN) :: new_attr_name + INTEGER(SIZE_T) :: new_attr_namelen + INTEGER(HID_T) :: lapl_id_default + + END FUNCTION h5arename_by_name_c + END INTERFACE + + obj_namelen = LEN(obj_name) + old_attr_namelen = LEN(old_attr_name) + new_attr_namelen = LEN(new_attr_name) + + lapl_id_default = H5P_DEFAULT_F + IF(PRESENT(lapl_id)) lapl_id_default=lapl_id + + hdferr = h5arename_by_name_c(loc_id, obj_name, obj_namelen, & + old_attr_name, old_attr_namelen, new_attr_name, new_attr_namelen, & + lapl_id_default) + + END SUBROUTINE h5arename_by_name_f + +!---------------------------------------------------------------------- +! Name: h5aopen_f +! +! Purpose: Opens an attribute for an object specified by object +! identifier and attribute name +! +! Inputs: +! obj_id - Identifer for object to which attribute is attached +! attr_name - Name of attribute to open +! Outputs: +! attr_id - attribute identifier +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! aapl_id - Attribute access property list +! +! Programmer: M.S. Breitenfeld +! January, 2008 +! +! Modifications: N/A +! +!---------------------------------------------------------------------- + + SUBROUTINE h5aopen_f(obj_id, attr_name, attr_id, hdferr, aapl_id) +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5aopen_f +!DEC$endif + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: obj_id ! Object identifier + CHARACTER(LEN=*), INTENT(IN) :: attr_name ! Attribute name + INTEGER(HID_T), INTENT(OUT) :: attr_id ! Attribute identifier + INTEGER, INTENT(OUT) :: hdferr ! Error code + ! Success: 0 + ! Failure: -1 + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: aapl_id ! Attribute access property list + INTEGER(HID_T) :: aapl_id_default + + INTEGER(SIZE_T) :: attr_namelen + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5aopen_c(obj_id, attr_name, attr_namelen, aapl_id_default, attr_id) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AOPEN_C'::h5aopen_c + !DEC$ ENDIF + !DEC$ATTRIBUTES reference :: name + INTEGER(HID_T), INTENT(IN) :: obj_id + CHARACTER(LEN=*), INTENT(IN) :: attr_name + INTEGER(HID_T) :: aapl_id_default + INTEGER(SIZE_T) :: attr_namelen + INTEGER(HID_T), INTENT(OUT) :: attr_id + END FUNCTION h5aopen_c + END INTERFACE + + attr_namelen = LEN(attr_name) + + aapl_id_default = H5P_DEFAULT_F + IF(PRESENT(aapl_id)) aapl_id_default = aapl_id + + hdferr = h5aopen_c(obj_id, attr_name, attr_namelen, aapl_id_default, attr_id) + + END SUBROUTINE h5aopen_f + +!---------------------------------------------------------------------- +! Name: h5adelete_by_idx_f +! +! Purpose: Deletes an attribute from an object according to index order +! +! Inputs: +! loc_id - Location or object identifier; may be dataset or group +! obj_name - Name of object, relative to location, from which attribute is to be removed +! idx_type - Type of index; Possible values are: +! +! H5_INDEX_UNKNOWN_F = -1 - Unknown index type +! H5_INDEX_NAME_F - Index on names +! H5_INDEX_CRT_ORDER_F - Index on creation order +! H5_INDEX_N_F - Number of indices defined +! +! order - Order in which to iterate over index; Possible values are: +! +! H5_ITER_UNKNOWN_F - Unknown order +! H5_ITER_INC_F - Increasing order +! H5_ITER_DEC_F - Decreasing order +! H5_ITER_NATIVE_F - No particular order, whatever is fastest +! H5_ITER_N_F - Number of iteration orders +! +! n - Offset within index +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! lapl_id - Link access property list +! +! Programmer: M.S. Breitenfeld +! January, 2008 +! +! Modifications: N/A +! +!---------------------------------------------------------------------- + SUBROUTINE h5adelete_by_idx_f(loc_id, obj_name, idx_type, order, n, hdferr, lapl_id) +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5adelete_by_idx_f +!DEC$endif + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id ! Identifer for object to which attribute is attached + CHARACTER(LEN=*), INTENT(IN) :: obj_name ! Name of object, relative to location, + ! from which attribute is to be removed + INTEGER, INTENT(IN) :: idx_type ! Type of index; Possible values are: + ! H5_INDEX_UNKNOWN_F - Unknown index type + ! H5_INDEX_NAME_F - Index on names + ! H5_INDEX_CRT_ORDER_F - Index on creation order + ! H5_INDEX_N_F - Number of indices defined + + INTEGER, INTENT(IN) :: order ! Order in which to iterate over index; Possible values are: + ! H5_ITER_UNKNOWN_F - Unknown order + ! H5_ITER_INC_F - Increasing order + ! H5_ITER_DEC_F - Decreasing order + ! H5_ITER_NATIVE_F - No particular order, whatever is fastest + ! H5_ITER_N_F - Number of iteration orders +! + INTEGER(HSIZE_T), INTENT(IN) :: n ! Offset within index + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! 0 on success and -1 on failure + INTEGER(SIZE_T) :: obj_namelen + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list + + INTEGER(HID_T) :: lapl_id_default + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5adelete_by_idx_c(loc_id, obj_name, obj_namelen, idx_type, order, n, lapl_id_default) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5ADELETE_BY_IDX_C'::h5adelete_by_idx_c + !DEC$ ENDIF + !DEC$ATTRIBUTES reference :: name + INTEGER(HID_T), INTENT(IN) :: loc_id + CHARACTER(LEN=*), INTENT(IN) :: obj_name + INTEGER, INTENT(IN) :: idx_type + INTEGER, INTENT(IN) :: order + INTEGER(HSIZE_T), INTENT(IN) :: n + INTEGER(HID_T) :: lapl_id_default + INTEGER(SIZE_T) :: obj_namelen + END FUNCTION h5adelete_by_idx_c + END INTERFACE + + lapl_id_default = H5P_DEFAULT_F + IF(PRESENT(lapl_id)) lapl_id_default = lapl_id + + obj_namelen = LEN(obj_name) + hdferr = h5adelete_by_idx_c(loc_id, obj_name, obj_namelen, idx_type, order, n, lapl_id_default) + + END SUBROUTINE h5adelete_by_idx_f + +!---------------------------------------------------------------------- +! Name: h5adelete_by_name_f +! +! Purpose: Removes an attribute from a specified location +! +! Inputs: +! loc_id - Identifer for object to which attribute is attached +! obj_name - Name of attribute to open +! attr_name - Attribute access property list +! lapl_id - Link access property list +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! January, 2008 +! +! Modifications: N/A +! +!---------------------------------------------------------------------- + SUBROUTINE h5adelete_by_name_f(loc_id, obj_name, attr_name, hdferr, lapl_id) +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5adelete_by_name_f +!DEC$endif + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id ! Identifer for object to which attribute is attached + CHARACTER(LEN=*), INTENT(IN) :: obj_name ! Name of object, relative to location, + ! from which attribute is to be removed + CHARACTER(LEN=*), INTENT(IN) :: attr_name ! Name of attribute to delete + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! 0 on success and -1 on failure + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list + INTEGER(SIZE_T) :: attr_namelen + INTEGER(SIZE_T) :: obj_namelen + + INTEGER(HID_T) :: lapl_id_default + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5adelete_by_name_c(loc_id, obj_name, obj_namelen, attr_name, attr_namelen, lapl_id_default) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5ADELETE_BY_NAME_C'::h5adelete_by_name_c + !DEC$ ENDIF + !DEC$ATTRIBUTES reference :: name + INTEGER(HID_T), INTENT(IN) :: loc_id + CHARACTER(LEN=*), INTENT(IN) :: obj_name + CHARACTER(LEN=*), INTENT(IN) :: attr_name + INTEGER(HID_T) :: lapl_id_default + INTEGER(SIZE_T) :: attr_namelen + INTEGER(SIZE_T) :: obj_namelen + END FUNCTION h5adelete_by_name_c + END INTERFACE + + obj_namelen = LEN(obj_name) + attr_namelen = LEN(attr_name) + + lapl_id_default = H5P_DEFAULT_F + IF(PRESENT(lapl_id)) lapl_id_default = lapl_id + + hdferr = h5adelete_by_name_c(loc_id, obj_name, obj_namelen, attr_name, attr_namelen, lapl_id_default) + + END SUBROUTINE h5adelete_by_name_f + +!---------------------------------------------------------------------- +! Name: h5aopen_by_idx_f +! +! Purpose: Opens an existing attribute that is attached to an object specified by location and name +! +! Inputs: +! loc_id - Location of object to which attribute is attached +! obj_name - Name of object to which attribute is attached, relative to location +! idx_type - Type of index +! order - Index traversal order +! n - Attribute’s position in index +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! aapl_id - Attribute access property list +! lapl_id - Link access property list +! +! Programmer: M.S. Breitenfeld +! January, 2008 +! +! Modifications: N/A +! +!---------------------------------------------------------------------- + + SUBROUTINE h5aopen_by_idx_f(loc_id, obj_name, idx_type, order, n, attr_id, hdferr, aapl_id, lapl_id) +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5aopen_by_idx_f +!DEC$endif + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id ! Object identifier + CHARACTER(LEN=*), INTENT(IN) :: obj_name ! Name of object to which attribute is attached + INTEGER, INTENT(IN) :: idx_type ! Type of index; Possible values are: + ! H5_INDEX_UNKNOWN_F - Unknown index type + ! H5_INDEX_NAME_F - Index on names + ! H5_INDEX_CRT_ORDER_F - Index on creation order + ! H5_INDEX_N_F - Number of indices defined + INTEGER, INTENT(IN) :: order ! Order in which to iterate over index; Possible values are: + ! H5_ITER_UNKNOWN_F - Unknown order + ! H5_ITER_INC_F - Increasing order + ! H5_ITER_DEC_F - Decreasing order + ! H5_ITER_NATIVE_F - No particular order, whatever is fastest + + INTEGER(HSIZE_T), INTENT(IN) :: n ! Attribute’s position in index + + INTEGER(HID_T), INTENT(OUT) :: attr_id ! Attribute identifier + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! 0 on success and -1 on failure + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: aapl_id ! Attribute access property list + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list + + INTEGER(SIZE_T) :: obj_namelen + INTEGER(HID_T) :: aapl_id_default + INTEGER(HID_T) :: lapl_id_default + +! +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5aopen_by_idx_c(loc_id, obj_name, obj_namelen, idx_type, order, n, & + aapl_id_default, lapl_id_default, attr_id) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AOPEN_BY_IDX_C'::h5aopen_by_idx_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: loc_id + CHARACTER(LEN=*), INTENT(IN) :: obj_name + INTEGER, INTENT(IN) :: idx_type + INTEGER, INTENT(IN) :: order + INTEGER(HSIZE_T), INTENT(IN) :: n + INTEGER(HID_T) :: aapl_id_default + INTEGER(HID_T) :: lapl_id_default + INTEGER(SIZE_T) :: obj_namelen + INTEGER(HID_T), INTENT(OUT) :: attr_id ! Attribute identifier + END FUNCTION h5aopen_by_idx_c + END INTERFACE + + obj_namelen = LEN(obj_name) + + aapl_id_default = H5P_DEFAULT_F + IF(PRESENT(aapl_id)) aapl_id_default = aapl_id + lapl_id_default = H5P_DEFAULT_F + IF(PRESENT(lapl_id)) lapl_id_default = lapl_id + + hdferr = h5aopen_by_idx_c(loc_id, obj_name, obj_namelen, idx_type, order, n, & + aapl_id_default, lapl_id_default, attr_id) + + END SUBROUTINE h5aopen_by_idx_f + +!---------------------------------------------------------------------- +! Name: h5aget_info_f +! +! Purpose: Retrieves attribute information, by attribute identifier +! +! Inputs: +! attr_id - attribute identifier +! +! Outputs: NOTE: In C it is defined as a structure: H5A_info_t +! +! corder_valid - indicates whether the creation order data is valid for this attribute +! corder - is a positive integer containing the creation order of the attribute +! cset - indicates the character set used for the attribute’s name +! data_size - indicates the size, in the number of characters, of the attribute +! +! hdferr - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M. S. Breitenfeld +! January, 2008 +! +! Modifications: N/A +! +!---------------------------------------------------------------------- + + SUBROUTINE h5aget_info_f(attr_id, f_corder_valid, corder, cset, data_size, hdferr) +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5aget_info_f +!DEC$endif + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: attr_id ! Attribute identifier + + LOGICAL, INTENT(OUT) :: f_corder_valid ! Indicates whether the creation order data is valid for this attribute + INTEGER, INTENT(OUT) :: corder ! Is a positive integer containing the creation order of the attribute + INTEGER, INTENT(OUT) :: cset ! Indicates the character set used for the attribute’s name + INTEGER(HSIZE_T), INTENT(OUT) :: data_size ! Indicates the size, in the number of characters, of the attribute + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! 0 on success and -1 on failure + + INTEGER :: corder_valid + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5aget_info_c(attr_id, corder_valid, corder, cset, data_size) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AGET_INFO_C'::h5aget_info_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: attr_id + + INTEGER, INTENT(OUT) :: corder_valid + INTEGER, INTENT(OUT) :: corder + INTEGER, INTENT(OUT) :: cset + INTEGER(HSIZE_T), INTENT(OUT) :: data_size + END FUNCTION h5aget_info_c + END INTERFACE + + hdferr = h5aget_info_c(attr_id, corder_valid, corder, cset, data_size) + + f_corder_valid =.FALSE. + IF (corder_valid .EQ. 1) f_corder_valid =.TRUE. + + + + END SUBROUTINE h5aget_info_f + +!---------------------------------------------------------------------- +! Name: h5aget_info_by_idx_f +! +! Purpose: Retrieves attribute information, by attribute index position +! +! Inputs: +! loc_id - Location of object to which attribute is attached +! obj_name - Name of object to which attribute is attached, relative to location +! idx_type - Type of index +! order - Index traversal order +! n - Attribute’s position in index +! +! Outputs: NOTE: In C it is defined as a structure: H5A_info_t +! corder_valid - indicates whether the creation order data is valid for this attribute +! corder - is a positive integer containing the creation order of the attribute +! cset - indicates the character set used for the attribute’s name +! data_size - indicates the size, in the number of characters, of the attribute +! hdferr - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! lapl_id - Link access property list +! +! Programmer: M. S. Breitenfeld +! January, 2008 +! +! Modifications: N/A +! +!---------------------------------------------------------------------- + SUBROUTINE h5aget_info_by_idx_f(loc_id, obj_name, idx_type, order, n, & + f_corder_valid, corder, cset, data_size, hdferr, lapl_id) +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5aget_info_by_idx_f +!DEC$endif + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id ! Object identifier + CHARACTER(LEN=*), INTENT(IN) :: obj_name ! Name of object to which attribute is attached + INTEGER, INTENT(IN) :: idx_type ! Type of index; Possible values are: + ! H5_INDEX_UNKNOWN_F - Unknown index type + ! H5_INDEX_NAME_F - Index on names + ! H5_INDEX_CRT_ORDER_F - Index on creation order + ! H5_INDEX_N_F - Number of indices defined + INTEGER, INTENT(IN) :: order ! Order in which to iterate over index; Possible values are: + ! H5_ITER_UNKNOWN_F - Unknown order + ! H5_ITER_INC_F - Increasing order + ! H5_ITER_DEC_F - Decreasing order + ! H5_ITER_NATIVE_F - No particular order, whatever is fastest + + INTEGER(HSIZE_T), INTENT(IN) :: n ! Attribute’s position in index + + + LOGICAL, INTENT(OUT) :: f_corder_valid ! Indicates whether the creation order data is valid for this attribute + INTEGER, INTENT(OUT) :: corder ! Is a positive integer containing the creation order of the attribute + INTEGER, INTENT(OUT) :: cset ! Indicates the character set used for the attribute’s name + INTEGER(HSIZE_T), INTENT(OUT) :: data_size ! Indicates the size, in the number of characters, of the attribute + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! 0 on success and -1 on failure + INTEGER :: corder_valid + INTEGER(SIZE_T) :: obj_namelen + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list + INTEGER(HID_T) :: lapl_id_default + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5aget_info_by_idx_c(loc_id, obj_name, obj_namelen, idx_type, order, n, lapl_id_default, & + corder_valid, corder, cset, data_size) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AGET_INFO_BY_IDX_C'::h5aget_info_by_idx_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: loc_id + CHARACTER(LEN=*), INTENT(IN) :: obj_name + INTEGER, INTENT(IN) :: idx_type + INTEGER, INTENT(IN) :: order + INTEGER(HSIZE_T), INTENT(IN) :: n + INTEGER(HID_T) :: lapl_id_default + INTEGER, INTENT(OUT) :: corder_valid + INTEGER, INTENT(OUT) :: corder + INTEGER, INTENT(OUT) :: cset + INTEGER(HSIZE_T), INTENT(OUT) :: data_size + + INTEGER(SIZE_T) :: obj_namelen + END FUNCTION h5aget_info_by_idx_c + END INTERFACE + + obj_namelen = LEN(obj_name) + + lapl_id_default = H5P_DEFAULT_F + IF(present(lapl_id)) lapl_id_default = lapl_id + + hdferr = h5aget_info_by_idx_c(loc_id, obj_name, obj_namelen, idx_type, order, n, lapl_id_default, & + corder_valid, corder, cset, data_size) + + f_corder_valid =.FALSE. + IF (corder_valid .EQ. 1) f_corder_valid =.TRUE. + + END SUBROUTINE h5aget_info_by_idx_f + +!---------------------------------------------------------------------- +! Name: h5aget_info_by_name_f +! +! Purpose: Retrieves attribute information, by attribute name +! +! Inputs: +! loc_id - Location of object to which attribute is attached +! obj_name - Name of object to which attribute is attached, relative to location +! attr_name - Attribute name +! +! Outputs: NOTE: In C it is defined as a structure: H5A_info_t +! corder_valid - indicates whether the creation order data is valid for this attribute +! corder - is a positive integer containing the creation order of the attribute +! cset - indicates the character set used for the attribute’s name +! data_size - indicates the size, in the number of characters, of the attribute +! hdferr - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! lapl_id - Link access property list +! +! Programmer: M. S. Breitenfeld +! January, 2008 +! +! Modifications: N/A +! +!---------------------------------------------------------------------- + SUBROUTINE h5aget_info_by_name_f(loc_id, obj_name, attr_name, & + f_corder_valid, corder, cset, data_size, hdferr, lapl_id) +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5aget_info_by_name_f +!DEC$endif + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id ! Object identifier + CHARACTER(LEN=*), INTENT(IN) :: obj_name ! Name of object to which attribute is attached + CHARACTER(LEN=*), INTENT(IN) :: attr_name ! Attribute name + + + LOGICAL, INTENT(OUT) :: f_corder_valid ! Indicates whether the creation order data is valid for this attribute + INTEGER, INTENT(OUT) :: corder ! Is a positive integer containing the creation order of the attribute + INTEGER, INTENT(OUT) :: cset ! Indicates the character set used for the attribute’s name + INTEGER(HSIZE_T), INTENT(OUT) :: data_size ! Indicates the size, in the number of characters, of the attribute + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! 0 on success and -1 on failure + INTEGER :: corder_valid + INTEGER(SIZE_T) :: obj_namelen + INTEGER(SIZE_T) :: attr_namelen + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list + INTEGER(HID_T) :: lapl_id_default + + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5aget_info_by_name_c(loc_id, obj_name, obj_namelen, attr_name, attr_namelen, lapl_id_default, & + corder_valid, corder, cset, data_size) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AGET_INFO_BY_NAME_C'::h5aget_info_by_name_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: loc_id + CHARACTER(LEN=*), INTENT(IN) :: obj_name + INTEGER(SIZE_T), INTENT(IN) :: obj_namelen + CHARACTER(LEN=*), INTENT(IN) :: attr_name + INTEGER(SIZE_T), INTENT(IN) :: attr_namelen + INTEGER(HID_T) :: lapl_id_default + INTEGER, INTENT(OUT) :: corder_valid + INTEGER, INTENT(OUT) :: corder + INTEGER, INTENT(OUT) :: cset + INTEGER(HSIZE_T), INTENT(OUT) :: data_size + + END FUNCTION h5aget_info_by_name_c + END INTERFACE + + obj_namelen = LEN(obj_name) + attr_namelen = LEN(attr_name) + + lapl_id_default = H5P_DEFAULT_F + IF(PRESENT(lapl_id)) lapl_id_default = lapl_id + + hdferr = h5aget_info_by_name_c(loc_id, obj_name, obj_namelen, attr_name, attr_namelen, lapl_id_default, & + corder_valid, corder, cset, data_size) + + f_corder_valid =.FALSE. + IF (corder_valid .EQ. 1) f_corder_valid =.TRUE. + + END SUBROUTINE h5aget_info_by_name_f + +!---------------------------------------------------------------------- +! Name: H5Acreate_by_name_f +! +! Purpose: Creates an attribute attached to a specified object +! +! Inputs: +! loc_id - Location or object identifier; may be dataset or group +! obj_name - Name, relative to loc_id, of object that attribute is to be attached to +! attr_name - Attribute name +! type_id - Attribute datatype identifier +! space_id - Attribute dataspace identifier +! +! Outputs: +! attr - an attribute identifier +! hdferr - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! acpl_id - Attribute creation property list identifier (Currently not used.) +! aapl_id - Attribute access property list identifier (Currently not used.) +! lapl_id - Link access property list +! +! Programmer: M. S. Breitenfeld +! February, 2008 +! +! Modifications: N/A +! +!---------------------------------------------------------------------- + SUBROUTINE h5acreate_by_name_f(loc_id, obj_name, attr_name, type_id, space_id, attr, hdferr, & + acpl_id, aapl_id, lapl_id) + +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5acreate_by_name_f +!DEC$endif + + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id ! Object identifier + CHARACTER(LEN=*), INTENT(IN) :: obj_name ! Name of object to which attribute is attached + CHARACTER(LEN=*), INTENT(IN) :: attr_name ! Attribute name + + INTEGER(HID_T), INTENT(IN) :: type_id ! Attribute datatype identifier + INTEGER(HID_T), INTENT(IN) :: space_id ! Attribute dataspace identifier + + INTEGER(HID_T), INTENT(OUT) :: attr ! an attribute identifier + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! 0 on success and -1 on failure + + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: acpl_id ! Attribute creation property list identifier (Currently not used.) + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: aapl_id ! Attribute access property list identifier (Currently not used.) + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list + + INTEGER(SIZE_T) :: obj_namelen + INTEGER(SIZE_T) :: attr_namelen + + INTEGER(HID_T) :: acpl_id_default + INTEGER(HID_T) :: aapl_id_default + INTEGER(HID_T) :: lapl_id_default + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5acreate_by_name_c(loc_id, obj_name, obj_namelen, attr_name, attr_namelen, & + type_id, space_id, acpl_id_default, aapl_id_default, lapl_id_default, attr) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5ACREATE_BY_NAME_C'::h5acreate_by_name_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: loc_id + CHARACTER(LEN=*), INTENT(IN) :: obj_name + INTEGER(SIZE_T), INTENT(IN) :: obj_namelen + CHARACTER(LEN=*), INTENT(IN) :: attr_name + INTEGER(SIZE_T), INTENT(IN) :: attr_namelen + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(HID_T), INTENT(IN) :: space_id + INTEGER(HID_T) :: acpl_id_default + INTEGER(HID_T) :: aapl_id_default + INTEGER(HID_T) :: lapl_id_default + INTEGER(HID_T), INTENT(OUT) :: attr + + END FUNCTION h5acreate_by_name_c + END INTERFACE + + obj_namelen = LEN(obj_name) + attr_namelen = LEN(attr_name) + + acpl_id_default = H5P_DEFAULT_F + aapl_id_default = H5P_DEFAULT_F + lapl_id_default = H5P_DEFAULT_F + + IF(PRESENT(acpl_id)) acpl_id_default = acpl_id + IF(PRESENT(aapl_id)) aapl_id_default = aapl_id + IF(PRESENT(lapl_id)) lapl_id_default = lapl_id + + hdferr = h5acreate_by_name_c(loc_id, obj_name, obj_namelen, attr_name, attr_namelen, & + type_id, space_id, acpl_id_default, aapl_id_default, lapl_id_default, attr) + END SUBROUTINE h5acreate_by_name_f + +!---------------------------------------------------------------------- +! Name: H5Aexists_f +! +! Purpose: Determines whether an attribute with a given name exists on an object +! +! Inputs: +! obj_id - Object identifier +! attr_name - Attribute name +! +! Outputs: +! attr_exists - attribute exists status +! hdferr - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M. S. Breitenfeld +! February, 2008 +! +! Modifications: N/A +! +!---------------------------------------------------------------------- + SUBROUTINE h5aexists_f(obj_id, attr_name, attr_exists, hdferr) + +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5aexists_f +!DEC$endif + + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: obj_id ! Object identifier + CHARACTER(LEN=*), INTENT(IN) :: attr_name ! Attribute name + LOGICAL, INTENT(OUT) :: attr_exists ! .TRUE. if exists, .FALSE. otherwise + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! 0 on success and -1 on failure + INTEGER(HID_T) :: attr_exists_c + INTEGER(SIZE_T) :: attr_namelen +! +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5aexists_c(obj_id, attr_name, attr_namelen, attr_exists_c) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AEXISTS_C'::h5aexists_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: obj_id + CHARACTER(LEN=*), INTENT(IN) :: attr_name + INTEGER(SIZE_T) :: attr_namelen + INTEGER(HID_T) :: attr_exists_c + END FUNCTION h5aexists_c + END INTERFACE + + attr_namelen = LEN(attr_name) + + hdferr = h5aexists_c(obj_id, attr_name, attr_namelen, attr_exists_c) + + attr_exists = .FALSE. + IF(attr_exists_c.GT.0) attr_exists = .TRUE. + + END SUBROUTINE h5aexists_f + +!---------------------------------------------------------------------- +! Name: H5Aexists_by_name_f +! +! Purpose: Determines whether an attribute with a given name exists on an object +! +! Inputs: +! loc_id - Location identifier +! obj_name - Object name either relative to loc_id, absolute from the file’s root group, or '.' (a dot) +! attr_name - Attribute name +! +! Outputs: +! attr_exists - attribute exists status +! hdferr - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! lapl_id - Link access property list identifier +! +! Programmer: M. S. Breitenfeld +! February, 2008 +! +! Modifications: N/A +! +!---------------------------------------------------------------------- + SUBROUTINE h5aexists_by_name_f(loc_id, obj_name, attr_name, attr_exists, hdferr, lapl_id) + +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5aexists_by_name_f +!DEC$endif + + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id ! Location identifier + CHARACTER(LEN=*), INTENT(IN) :: obj_name ! Object name either relative to loc_id, + ! absolute from the file’s root group, or '.' + CHARACTER(LEN=*), INTENT(IN) :: attr_name ! Attribute name + LOGICAL, INTENT(OUT) :: attr_exists ! .TRUE. if exists, .FALSE. otherwise + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! 0 on success and -1 on failure + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list identifier + INTEGER :: attr_exists_c + INTEGER(SIZE_T) :: obj_namelen + INTEGER(SIZE_T) :: attr_namelen + + INTEGER(HID_T) :: lapl_id_default +! +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5aexists_by_name_c(loc_id, obj_name, obj_namelen, attr_name, attr_namelen, lapl_id_default, attr_exists_c) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AEXISTS_BY_NAME_C'::h5aexists_by_name_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: loc_id + CHARACTER(LEN=*), INTENT(IN) :: obj_name + INTEGER(SIZE_T), INTENT(IN) :: obj_namelen + CHARACTER(LEN=*), INTENT(IN) :: attr_name + INTEGER(SIZE_T), INTENT(IN) :: attr_namelen + INTEGER(HID_T), INTENT(IN) :: lapl_id_default + INTEGER, INTENT(OUT) :: attr_exists_c + END FUNCTION h5aexists_by_name_c + END INTERFACE + + attr_namelen = LEN(attr_name) + obj_namelen = LEN(obj_name) + + lapl_id_default = H5P_DEFAULT_F + IF(PRESENT(lapl_id)) lapl_id_default = lapl_id + + hdferr = h5aexists_by_name_c(loc_id, obj_name, obj_namelen, attr_name, attr_namelen, lapl_id_default, attr_exists_c) + + attr_exists = .FALSE. + IF(attr_exists_c.GT.0) attr_exists = .TRUE. + + END SUBROUTINE h5aexists_by_name_f +!---------------------------------------------------------------------- +! Name: H5Aopen_by_name_f +! +! Purpose: Opens an attribute for an object by object name and attribute name. +! +! Inputs: +! loc_id - Location from which to find object to which attribute is attached +! obj_name - Object name either relative to loc_id, absolute from the file’s root group, or '.' (a dot) +! attr_name - Attribute name +! +! Outputs: +! attr_id - attribute identifier +! hdferr - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! aapl_id - Attribute access property list (Currently unused; should be passed in as H5P_DEFAULT.) +! lapl_id - Link access property list identifier +! +! Programmer: M. S. Breitenfeld +! February, 2008 +! +! Modifications: N/A +! +!---------------------------------------------------------------------- + SUBROUTINE h5aopen_by_name_f(loc_id, obj_name, attr_name, attr_id, hdferr, aapl_id, lapl_id) + +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5aopen_by_name_f +!DEC$endif + + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id ! Location identifier + CHARACTER(LEN=*), INTENT(IN) :: obj_name ! Object name either relative to loc_id, + ! absolute from the file’s root group, or '.' + CHARACTER(LEN=*), INTENT(IN) :: attr_name ! Attribute name + INTEGER(HID_T), INTENT(OUT) :: attr_id ! Attribute identifier + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! 0 on success and -1 on failure + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: aapl_id ! Attribute access property list + ! (Currently unused; should be passed in as H5P_DEFAULT_F) + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list identifier + + INTEGER(HID_T) :: aapl_id_default + INTEGER(HID_T) :: lapl_id_default + + INTEGER(SIZE_T) :: obj_namelen + INTEGER(SIZE_T) :: attr_namelen +! +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5aopen_by_name_c(loc_id, obj_name, obj_namelen, attr_name, attr_namelen, & + aapl_id_default, lapl_id_default, attr_id) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5AOPEN_BY_NAME_C'::h5aopen_by_name_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: loc_id + CHARACTER(LEN=*), INTENT(IN) :: obj_name + INTEGER(SIZE_T), INTENT(IN) :: obj_namelen + CHARACTER(LEN=*), INTENT(IN) :: attr_name + INTEGER(SIZE_T), INTENT(IN) :: attr_namelen + INTEGER(HID_T) :: aapl_id_default + INTEGER(HID_T) :: lapl_id_default + INTEGER(HID_T), INTENT(OUT) :: attr_id + END FUNCTION h5aopen_by_name_c + END INTERFACE + + attr_namelen = LEN(attr_name) + obj_namelen = LEN(obj_name) + + aapl_id_default = H5P_DEFAULT_F + lapl_id_default = H5P_DEFAULT_F + IF(PRESENT(aapl_id)) aapl_id_default = aapl_id + IF(PRESENT(lapl_id)) lapl_id_default = lapl_id + + hdferr = h5aopen_by_name_c(loc_id, obj_name, obj_namelen, attr_name, attr_namelen, & + aapl_id_default, lapl_id_default, attr_id) + + END SUBROUTINE h5aopen_by_name_f + +!---------------------------------------------------------------------- +! Name: h5arename_f +! +! Purpose: Renames an attribute +! +! Inputs: +! loc_id - Location or object identifier; may be dataset or group +! old_attr_name - Prior attribute name +! new_attr_name - New attribute name +! +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! +! Programmer: M.S. Breitenfeld +! January, 2008 +! +! Modifications: N/A +! +!---------------------------------------------------------------------- + + SUBROUTINE h5arename_f(loc_id, old_attr_name, new_attr_name, hdferr) + +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5arename_f +!DEC$endif + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id ! Object identifier + CHARACTER(LEN=*), INTENT(IN) :: old_attr_name ! Prior attribute name + CHARACTER(LEN=*), INTENT(IN) :: new_attr_name ! New attribute name + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! 0 on success and -1 on failure + INTEGER(SIZE_T) :: old_attr_namelen + INTEGER(SIZE_T) :: new_attr_namelen + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5arename_c(loc_id, & + old_attr_name, old_attr_namelen, new_attr_name, new_attr_namelen) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5ARENAME_C'::h5arename_c + !DEC$ ENDIF + !DEC$ATTRIBUTES reference :: old_attr_name, new_attr_name + INTEGER(HID_T), INTENT(IN) :: loc_id + CHARACTER(LEN=*), INTENT(IN) :: old_attr_name + INTEGER(SIZE_T) :: old_attr_namelen + CHARACTER(LEN=*), INTENT(IN) :: new_attr_name + INTEGER(SIZE_T) :: new_attr_namelen + + END FUNCTION h5arename_c + END INTERFACE + + old_attr_namelen = LEN(old_attr_name) + new_attr_namelen = LEN(new_attr_name) + + hdferr = h5arename_c(loc_id, & + old_attr_name, old_attr_namelen, new_attr_name, new_attr_namelen) + + END SUBROUTINE h5arename_f + +END MODULE H5A - hdferr = h5aclose_c(attr_id) - END SUBROUTINE h5aclose_f - END MODULE H5A diff --git a/fortran/src/H5Df.c b/fortran/src/H5Df.c index 929a056..49f8266 100644 --- a/fortran/src/H5Df.c +++ b/fortran/src/H5Df.c @@ -30,10 +30,13 @@ * Returns: 0 on success, -1 on failure * Programmer: Elena Pourmal * Wednesday, August 4, 1999 - * Modifications: + * Modifications: + * - Added optional parameters introduced in version 1.8 + * February, 2008 *---------------------------------------------------------------------------*/ int_f -nh5dcreate_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *type_id, hid_t_f *space_id, hid_t_f *crt_prp, hid_t_f *dset_id) +nh5dcreate_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *type_id, hid_t_f *space_id, + hid_t_f *lcpl_id, hid_t_f *dcpl_id, hid_t_f *dapl_id, hid_t_f *dset_id) { char *c_name = NULL; hid_t c_dset_id; @@ -48,7 +51,8 @@ nh5dcreate_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *type_id, hid_ /* * Call H5Dcreate2 function. */ - if((c_dset_id = H5Dcreate2((hid_t)*loc_id, c_name, (hid_t)*type_id, (hid_t)*space_id, H5P_DEFAULT, (hid_t)*crt_prp, H5P_DEFAULT)) < 0) + if((c_dset_id = H5Dcreate2((hid_t)*loc_id, c_name, (hid_t)*type_id, (hid_t)*space_id, + (hid_t)*lcpl_id, (hid_t)*dcpl_id, (hid_t)*dapl_id)) < 0) goto DONE; *dset_id = (hid_t_f)c_dset_id; @@ -66,14 +70,15 @@ DONE: * Inputs: loc_id - file or group identifier * name - name of the dataset * namelen - name length + * dapl_id - Dataset access property list * Outputs: dset_id - dataset identifier * Returns: 0 on success, -1 on failure * Programmer: Elena Pourmal * Wednesday, August 4, 1999 - * Modifications: + * Modifications: Added 1.8 parameter: dapl_id *---------------------------------------------------------------------------*/ int_f -nh5dopen_c(hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *dset_id) +nh5dopen_c(hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *dapl_id, hid_t_f *dset_id) { char *c_name = NULL; hid_t c_dset_id; @@ -88,7 +93,7 @@ nh5dopen_c(hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *dset_id) /* * Call H5Dopen2 function. */ - if((c_dset_id = H5Dopen2((hid_t)*loc_id, c_name, H5P_DEFAULT)) < 0) + if((c_dset_id = H5Dopen2((hid_t)*loc_id, c_name, (hid_t)*dapl_id)) < 0) goto DONE; *dset_id = (hid_t_f)c_dset_id; @@ -1257,18 +1262,21 @@ nh5dget_create_plist_c ( hid_t_f *dset_id , hid_t_f *plist_id) /*---------------------------------------------------------------------------- - * Name: h5dextend_c + * Name: h5dset_extent_c * Purpose: Call H5Dset_extent to extend dataset with unlimited dimensions * Inputs: dset_id - identifier of the dataset * Outputs: dims - array with the dimension sizes * Returns: 0 on success, -1 on failure * Programmer: Elena Pourmal * Thursday, August 19, 1999 - * Modifications: + * + * Modifications: Changed name from the now obsolete h5dextend + * to h5dset_extent in order to match new fortran interface. + * -MSB- March 14, 2008 *---------------------------------------------------------------------------*/ int_f -nh5dextend_c ( hid_t_f *dset_id , hsize_t_f *dims) +nh5dset_extent_c ( hid_t_f *dset_id , hsize_t_f *dims) { hid_t c_space_id; hsize_t c_dims[H5S_MAX_RANK]; @@ -1946,4 +1954,39 @@ nh5dget_space_status_c ( hid_t_f *dset_id, int_f *flag) ret_value = 0; return ret_value; } +/*---------------------------------------------------------------------------- + * Name: h5dcreate_anon_c + * Purpose: Call H5Dcreate_anon + * Inputs: + * loc_id - Identifier of the file or group within which to create the dataset. + * type_id - Identifier of the datatype to use when creating the dataset. + * space_id - Identifier of the dataspace to use when creating the dataset. + * dcpl_id - Dataset creation property list identifier. + * dapl_id - Dataset access property list identifier. + * Outputs: + * dset_id - dataset identifier + * + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * February, 2008 + *---------------------------------------------------------------------------*/ +int_f +nh5dcreate_anon_c (hid_t_f *loc_id, hid_t_f *type_id, hid_t_f *space_id, + hid_t_f *dcpl_id, hid_t_f *dapl_id, hid_t_f *dset_id) +{ + int ret_value = -1; + + /* + * Call H5Dcreate2 function. + */ + if((*dset_id = (hid_t_f)H5Dcreate_anon((hid_t)*loc_id, (hid_t)*type_id, (hid_t)*space_id, + (hid_t)*dcpl_id, (hid_t)*dapl_id)) < 0) + goto DONE; + + ret_value = 0; + + DONE: + return ret_value; +} + diff --git a/fortran/src/H5Dff.f90 b/fortran/src/H5Dff.f90 index 34bcdf4..a94339f 100644 --- a/fortran/src/H5Dff.f90 +++ b/fortran/src/H5Dff.f90 @@ -16,111 +16,115 @@ ! ! This file contains Fortran90 interfaces for H5D functions. ! - MODULE H5D - USE H5GLOBAL - - INTERFACE h5dwrite_f - - MODULE PROCEDURE h5dwrite_reference_obj - MODULE PROCEDURE h5dwrite_reference_dsetreg - MODULE PROCEDURE h5dwrite_integer_scalar - MODULE PROCEDURE h5dwrite_integer_1 - MODULE PROCEDURE h5dwrite_integer_2 - MODULE PROCEDURE h5dwrite_integer_3 - MODULE PROCEDURE h5dwrite_integer_4 - MODULE PROCEDURE h5dwrite_integer_5 - MODULE PROCEDURE h5dwrite_integer_6 - MODULE PROCEDURE h5dwrite_integer_7 - MODULE PROCEDURE h5dwrite_char_scalar - MODULE PROCEDURE h5dwrite_char_1 - MODULE PROCEDURE h5dwrite_char_2 - MODULE PROCEDURE h5dwrite_char_3 - MODULE PROCEDURE h5dwrite_char_4 - MODULE PROCEDURE h5dwrite_char_5 - MODULE PROCEDURE h5dwrite_char_6 - MODULE PROCEDURE h5dwrite_char_7 - MODULE PROCEDURE h5dwrite_real_scalar - MODULE PROCEDURE h5dwrite_real_1 - MODULE PROCEDURE h5dwrite_real_2 - MODULE PROCEDURE h5dwrite_real_3 - MODULE PROCEDURE h5dwrite_real_4 - MODULE PROCEDURE h5dwrite_real_5 - MODULE PROCEDURE h5dwrite_real_6 - MODULE PROCEDURE h5dwrite_real_7 -! Comment if on Crays - MODULE PROCEDURE h5dwrite_double_scalar - MODULE PROCEDURE h5dwrite_double_1 - MODULE PROCEDURE h5dwrite_double_2 - MODULE PROCEDURE h5dwrite_double_3 - MODULE PROCEDURE h5dwrite_double_4 - MODULE PROCEDURE h5dwrite_double_5 - MODULE PROCEDURE h5dwrite_double_6 - MODULE PROCEDURE h5dwrite_double_7 -! End comment if on Crays - END INTERFACE - - INTERFACE h5dread_f - - MODULE PROCEDURE h5dread_reference_obj - MODULE PROCEDURE h5dread_reference_dsetreg - MODULE PROCEDURE h5dread_integer_scalar - MODULE PROCEDURE h5dread_integer_1 - MODULE PROCEDURE h5dread_integer_2 - MODULE PROCEDURE h5dread_integer_3 - MODULE PROCEDURE h5dread_integer_4 - MODULE PROCEDURE h5dread_integer_5 - MODULE PROCEDURE h5dread_integer_6 - MODULE PROCEDURE h5dread_integer_7 - MODULE PROCEDURE h5dread_char_scalar - MODULE PROCEDURE h5dread_char_1 - MODULE PROCEDURE h5dread_char_2 - MODULE PROCEDURE h5dread_char_3 - MODULE PROCEDURE h5dread_char_4 - MODULE PROCEDURE h5dread_char_5 - MODULE PROCEDURE h5dread_char_6 - MODULE PROCEDURE h5dread_char_7 - MODULE PROCEDURE h5dread_real_scalar - MODULE PROCEDURE h5dread_real_1 - MODULE PROCEDURE h5dread_real_2 - MODULE PROCEDURE h5dread_real_3 - MODULE PROCEDURE h5dread_real_4 - MODULE PROCEDURE h5dread_real_5 - MODULE PROCEDURE h5dread_real_6 - MODULE PROCEDURE h5dread_real_7 -! Comment if on Crays - MODULE PROCEDURE h5dread_double_scalar - MODULE PROCEDURE h5dread_double_1 - MODULE PROCEDURE h5dread_double_2 - MODULE PROCEDURE h5dread_double_3 - MODULE PROCEDURE h5dread_double_4 - MODULE PROCEDURE h5dread_double_5 - MODULE PROCEDURE h5dread_double_6 - MODULE PROCEDURE h5dread_double_7 -! End comment if on Crays - - END INTERFACE - - INTERFACE h5dwrite_vl_f - MODULE PROCEDURE h5dwrite_vl_integer - MODULE PROCEDURE h5dwrite_vl_real - MODULE PROCEDURE h5dwrite_vl_string - END INTERFACE - - INTERFACE h5dread_vl_f - MODULE PROCEDURE h5dread_vl_integer - MODULE PROCEDURE h5dread_vl_real - MODULE PROCEDURE h5dread_vl_string - END INTERFACE - - INTERFACE h5dfill_f - MODULE PROCEDURE h5dfill_integer - MODULE PROCEDURE h5dfill_real - MODULE PROCEDURE h5dfill_double - MODULE PROCEDURE h5dfill_char - END INTERFACE - - - CONTAINS +MODULE H5D + USE H5GLOBAL + + INTERFACE h5dwrite_f + + MODULE PROCEDURE h5dwrite_reference_obj + MODULE PROCEDURE h5dwrite_reference_dsetreg + MODULE PROCEDURE h5dwrite_integer_scalar + MODULE PROCEDURE h5dwrite_integer_1 + MODULE PROCEDURE h5dwrite_integer_2 + MODULE PROCEDURE h5dwrite_integer_3 + MODULE PROCEDURE h5dwrite_integer_4 + MODULE PROCEDURE h5dwrite_integer_5 + MODULE PROCEDURE h5dwrite_integer_6 + MODULE PROCEDURE h5dwrite_integer_7 + MODULE PROCEDURE h5dwrite_char_scalar + MODULE PROCEDURE h5dwrite_char_1 + MODULE PROCEDURE h5dwrite_char_2 + MODULE PROCEDURE h5dwrite_char_3 + MODULE PROCEDURE h5dwrite_char_4 + MODULE PROCEDURE h5dwrite_char_5 + MODULE PROCEDURE h5dwrite_char_6 + MODULE PROCEDURE h5dwrite_char_7 + MODULE PROCEDURE h5dwrite_real_scalar + MODULE PROCEDURE h5dwrite_real_1 + MODULE PROCEDURE h5dwrite_real_2 + MODULE PROCEDURE h5dwrite_real_3 + MODULE PROCEDURE h5dwrite_real_4 + MODULE PROCEDURE h5dwrite_real_5 + MODULE PROCEDURE h5dwrite_real_6 + MODULE PROCEDURE h5dwrite_real_7 + ! Comment if on Crays + MODULE PROCEDURE h5dwrite_double_scalar + MODULE PROCEDURE h5dwrite_double_1 + MODULE PROCEDURE h5dwrite_double_2 + MODULE PROCEDURE h5dwrite_double_3 + MODULE PROCEDURE h5dwrite_double_4 + MODULE PROCEDURE h5dwrite_double_5 + MODULE PROCEDURE h5dwrite_double_6 + MODULE PROCEDURE h5dwrite_double_7 + ! End comment if on Crays + END INTERFACE + + INTERFACE h5dread_f + + MODULE PROCEDURE h5dread_reference_obj + MODULE PROCEDURE h5dread_reference_dsetreg + MODULE PROCEDURE h5dread_integer_scalar + MODULE PROCEDURE h5dread_integer_1 + MODULE PROCEDURE h5dread_integer_2 + MODULE PROCEDURE h5dread_integer_3 + MODULE PROCEDURE h5dread_integer_4 + MODULE PROCEDURE h5dread_integer_5 + MODULE PROCEDURE h5dread_integer_6 + MODULE PROCEDURE h5dread_integer_7 + MODULE PROCEDURE h5dread_char_scalar + MODULE PROCEDURE h5dread_char_1 + MODULE PROCEDURE h5dread_char_2 + MODULE PROCEDURE h5dread_char_3 + MODULE PROCEDURE h5dread_char_4 + MODULE PROCEDURE h5dread_char_5 + MODULE PROCEDURE h5dread_char_6 + MODULE PROCEDURE h5dread_char_7 + MODULE PROCEDURE h5dread_real_scalar + MODULE PROCEDURE h5dread_real_1 + MODULE PROCEDURE h5dread_real_2 + MODULE PROCEDURE h5dread_real_3 + MODULE PROCEDURE h5dread_real_4 + MODULE PROCEDURE h5dread_real_5 + MODULE PROCEDURE h5dread_real_6 + MODULE PROCEDURE h5dread_real_7 + ! Comment if on Crays + MODULE PROCEDURE h5dread_double_scalar + MODULE PROCEDURE h5dread_double_1 + MODULE PROCEDURE h5dread_double_2 + MODULE PROCEDURE h5dread_double_3 + MODULE PROCEDURE h5dread_double_4 + MODULE PROCEDURE h5dread_double_5 + MODULE PROCEDURE h5dread_double_6 + MODULE PROCEDURE h5dread_double_7 + ! End comment if on Crays + + END INTERFACE + + INTERFACE h5dwrite_vl_f + MODULE PROCEDURE h5dwrite_vl_integer + MODULE PROCEDURE h5dwrite_vl_real + MODULE PROCEDURE h5dwrite_vl_string + END INTERFACE + + INTERFACE h5dread_vl_f + MODULE PROCEDURE h5dread_vl_integer + MODULE PROCEDURE h5dread_vl_real + MODULE PROCEDURE h5dread_vl_string + END INTERFACE + + INTERFACE h5dfill_f + MODULE PROCEDURE h5dfill_integer + MODULE PROCEDURE h5dfill_real + MODULE PROCEDURE h5dfill_double + MODULE PROCEDURE h5dfill_char + END INTERFACE + + INTERFACE h5dextend_f + MODULE PROCEDURE h5dset_extent_f + END INTERFACE + + +CONTAINS !---------------------------------------------------------------------- ! Name: h5dcreate_f @@ -138,64 +142,86 @@ ! Success: 0 ! Failure: -1 ! Optional parameters: -! createion_prp - dataset creation property list identifier +! creation_prp - Dataset creation property list +! lcpl_id - Link creation property list +! dapl_id - Dataset access property list ! ! Programmer: Elena Pourmal ! August 12, 1999 ! -! Modifications: Explicit Fortran interfaces were added for -! called C functions (it is needed for Windows -! port). February 28, 2001 +! Modifications: +! - Explicit Fortran interfaces were added for +! called C functions (it is needed for Windows +! port). February 28, 2001 +! +! - Added version's 1.8 new optional parameters +! February, 2008 ! ! Comment: !---------------------------------------------------------------------- - SUBROUTINE h5dcreate_f(loc_id, name, type_id, space_id, dset_id, & - hdferr, creation_prp) + SUBROUTINE h5dcreate_f(loc_id, name, type_id, space_id, dset_id, & + hdferr, dcpl_id, lcpl_id, dapl_id) + !This definition is needed for Windows DLLs !DEC$if defined(BUILD_HDF5_DLL) !DEC$attributes dllexport :: h5dcreate_f !DEC$endif - IMPLICIT NONE - INTEGER(HID_T), INTENT(IN) :: loc_id ! File or group identifier - CHARACTER(LEN=*), INTENT(IN) :: name ! Name of the dataset - INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier - INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier - INTEGER(HID_T), INTENT(OUT) :: dset_id ! Dataset identifier - INTEGER, INTENT(OUT) :: hdferr ! Error code - INTEGER(HID_T), OPTIONAL, INTENT(IN) :: creation_prp - ! Dataset creation propertly - ! list identifier - INTEGER(HID_T) :: creation_prp_default - INTEGER :: namelen ! Name length + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id ! File or group identifier + CHARACTER(LEN=*), INTENT(IN) :: name ! Name of the dataset + INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier + INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier + INTEGER(HID_T), INTENT(OUT) :: dset_id ! Dataset identifier + INTEGER, INTENT(OUT) :: hdferr ! Error code + + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: dcpl_id ! Dataset creation property list + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lcpl_id ! Link creation property list + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: dapl_id ! Dataset access property list + + INTEGER(HID_T) :: lcpl_id_default + INTEGER(HID_T) :: dcpl_id_default + INTEGER(HID_T) :: dapl_id_default + + INTEGER :: namelen ! Name length -! INTEGER, EXTERNAL :: h5dcreate_c ! MS FORTRAN needs explicit interface for C functions called here. ! - INTERFACE - INTEGER FUNCTION h5dcreate_c(loc_id, name, namelen, type_id, & - space_id, creation_prp_default, dset_id) - USE H5GLOBAL - !DEC$ IF DEFINED(HDF5F90_WINDOWS) - !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5DCREATE_C'::h5dcreate_c - !DEC$ ENDIF - !DEC$ATTRIBUTES reference :: name - INTEGER(HID_T), INTENT(IN) :: loc_id - CHARACTER(LEN=*), INTENT(IN) :: name - INTEGER :: namelen - INTEGER(HID_T), INTENT(IN) :: type_id - INTEGER(HID_T), INTENT(IN) :: space_id - INTEGER(HID_T) :: creation_prp_default - INTEGER(HID_T), INTENT(OUT) :: dset_id - END FUNCTION h5dcreate_c - END INTERFACE - - creation_prp_default = H5P_DEFAULT_F - if (present(creation_prp)) creation_prp_default = creation_prp - namelen = LEN(name) - hdferr = h5dcreate_c(loc_id, name, namelen, type_id, space_id, & - creation_prp_default, dset_id) - END SUBROUTINE h5dcreate_f + INTERFACE + INTEGER FUNCTION h5dcreate_c(loc_id, name, namelen, type_id, & + space_id, lcpl_id_default, dcpl_id_default, dapl_id_default, dset_id) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5DCREATE_C'::h5dcreate_c + !DEC$ ENDIF + !DEC$ATTRIBUTES reference :: name + INTEGER(HID_T), INTENT(IN) :: loc_id + CHARACTER(LEN=*), INTENT(IN) :: name + INTEGER :: namelen + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(HID_T), INTENT(IN) :: space_id + + INTEGER(HID_T) :: lcpl_id_default + INTEGER(HID_T) :: dcpl_id_default + INTEGER(HID_T) :: dapl_id_default + + INTEGER(HID_T), INTENT(OUT) :: dset_id + END FUNCTION h5dcreate_c + END INTERFACE + + lcpl_id_default = H5P_DEFAULT_F + dcpl_id_default = H5P_DEFAULT_F + dapl_id_default = H5P_DEFAULT_F + + IF(PRESENT(lcpl_id)) lcpl_id_default = lcpl_id + IF(PRESENT(dcpl_id)) dcpl_id_default = dcpl_id + IF(PRESENT(dapl_id)) dapl_id_default = dapl_id + + namelen = LEN(name) + hdferr = h5dcreate_c(loc_id, name, namelen, type_id, space_id, & + lcpl_id_default, dcpl_id_default, dapl_id_default, dset_id) + + END SUBROUTINE h5dcreate_f !---------------------------------------------------------------------- ! Name: h5dopen_f @@ -211,19 +237,22 @@ ! Success: 0 ! Failure: -1 ! Optional parameters: -! NONE +! dapl_id - Dataset access property list ! ! Programmer: Elena Pourmal ! August 12, 1999 ! -! Modifications: Explicit Fortran interfaces were added for -! called C functions (it is needed for Windows -! port). February 28, 2001 +! Modifications: -Explicit Fortran interfaces were added for +! called C functions (it is needed for Windows +! port). February 28, 2001 +! +! -Added 1.8 (optional) parameter dapl_id +! February, 2008, M.S. Breitenfeld ! ! Comment: !---------------------------------------------------------------------- - SUBROUTINE h5dopen_f(loc_id, name, dset_id, hdferr) + SUBROUTINE h5dopen_f(loc_id, name, dset_id, hdferr, dapl_id) !This definition is needed for Windows DLLs !DEC$if defined(BUILD_HDF5_DLL) !DEC$attributes dllexport :: h5dopen_f @@ -231,15 +260,18 @@ IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: loc_id ! File or group identifier CHARACTER(LEN=*), INTENT(IN) :: name ! Name of the dataset - INTEGER(HID_T), INTENT(OUT) :: dset_id ! Dataset identifier + INTEGER(HID_T), INTENT(OUT) :: dset_id ! Dataset identifier INTEGER, INTENT(OUT) :: hdferr ! Error code + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: dapl_id ! Dataset access property list INTEGER :: namelen ! Name length + INTEGER(HID_T) :: dapl_id_default + ! INTEGER, EXTERNAL :: h5dopen_c ! MS FORTRAN needs explicit interface for C functions called here. ! INTERFACE - INTEGER FUNCTION h5dopen_c(loc_id, name, namelen, dset_id) + INTEGER FUNCTION h5dopen_c(loc_id, name, namelen, dapl_id_default, dset_id) USE H5GLOBAL !DEC$ IF DEFINED(HDF5F90_WINDOWS) !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5DOPEN_C'::h5dopen_c @@ -248,12 +280,16 @@ INTEGER(HID_T), INTENT(IN) :: loc_id CHARACTER(LEN=*), INTENT(IN) :: name INTEGER :: namelen + INTEGER(HID_T), INTENT(IN) :: dapl_id_default INTEGER(HID_T), INTENT(OUT) :: dset_id END FUNCTION h5dopen_c END INTERFACE + dapl_id_default = H5P_DEFAULT_F + IF(PRESENT(dapl_id)) dapl_id_default = dapl_id + namelen = LEN(name) - hdferr = h5dopen_c(loc_id, name, namelen, dset_id) + hdferr = h5dopen_c(loc_id, name, namelen, dapl_id_default, dset_id) END SUBROUTINE h5dopen_f @@ -332,7 +368,7 @@ INTEGER(HID_T) :: mem_space_id_default INTEGER(HID_T) :: file_space_id_default INTEGER(HADDR_T), ALLOCATABLE, DIMENSION(:) :: ref_buf - INTEGER :: i,j + INTEGER :: j ! INTEGER, EXTERNAL :: h5dwrite_ref_obj_c ! MS FORTRAN needs explicit interface for C functions called here. @@ -2499,7 +2535,7 @@ INTEGER(HID_T) :: mem_space_id_default INTEGER(HID_T) :: file_space_id_default INTEGER(HADDR_T), ALLOCATABLE, DIMENSION(:) :: ref_buf - INTEGER :: i,j + INTEGER :: j ! INTEGER, EXTERNAL :: h5dread_ref_obj_c ! MS FORTRAN needs explicit interface for C functions called here. @@ -4705,7 +4741,7 @@ END SUBROUTINE h5dget_type_f !---------------------------------------------------------------------- -! Name: h5dextend_f +! Name: h5dset_extent (instead of obsolete name: h5dextend_f) ! ! Purpose: Extends a dataset with unlimited dimension. ! @@ -4727,14 +4763,18 @@ ! called C functions (it is needed for Windows ! port). February 28, 2001 ! +! Changed name from the now obsolete h5dextend_f +! to h5dset_extent_f. Provided interface to old name +! for backward compatability. -MSB- March 14, 2008 +! ! Comment: !---------------------------------------------------------------------- - SUBROUTINE h5dextend_f(dataset_id, size, hdferr) + SUBROUTINE H5Dset_extent_f(dataset_id, size, hdferr) !This definition is needed for Windows DLLs !DEC$if defined(BUILD_HDF5_DLL) -!DEC$attributes dllexport :: h5dextend_f +!DEC$attributes dllexport :: H5Dset_extent_f !DEC$endif IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: dataset_id ! Dataset identifier @@ -4743,22 +4783,22 @@ ! dimensions' sizes INTEGER, INTENT(OUT) :: hdferr ! Error code -! INTEGER, EXTERNAL :: h5dextend_c +! INTEGER, EXTERNAL :: H5Dset_extent_c ! MS FORTRAN needs explicit interface for C functions called here. ! INTERFACE - INTEGER FUNCTION h5dextend_c(dataset_id, size) + INTEGER FUNCTION H5Dset_extent_c(dataset_id, size) USE H5GLOBAL !DEC$ IF DEFINED(HDF5F90_WINDOWS) - !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5DEXTEND_C'::h5dextend_c + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5DSET_EXTENT_C'::H5Dset_extent_c !DEC$ ENDIF INTEGER(HID_T), INTENT(IN) :: dataset_id INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: size - END FUNCTION h5dextend_c + END FUNCTION H5Dset_extent_c END INTERFACE - hdferr = h5dextend_c(dataset_id, size) - END SUBROUTINE h5dextend_f + hdferr = H5Dset_extent_c(dataset_id, size) + END SUBROUTINE H5Dset_extent_f !---------------------------------------------------------------------- @@ -5215,7 +5255,6 @@ INTEGER(HID_T) :: mem_space_id_default INTEGER(HID_T) :: file_space_id_default ! CHARACTER, DIMENSION(dims(1)*dims(2)) :: tmp_buf - integer i, j INTERFACE INTEGER FUNCTION h5dwrite_vl_string_c(dset_id, mem_type_id, & @@ -5646,4 +5685,79 @@ hdferr = h5dget_space_status_c(dset_id, flag) END SUBROUTINE h5dget_space_status_f - END MODULE H5D +!---------------------------------------------------------------------- +! Name: h5dcreate_anon_f +! +! Purpose: Creates a dataset in a file without linking it into the file structure +! +! Inputs: +! loc_id - Identifier of the file or group within which to create the dataset. +! type_id - Identifier of the datatype to use when creating the dataset. +! space_id - Identifier of the dataspace to use when creating the dataset. +! Outputs: +! dset_id - dataset identifier +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! dcpl_id - Dataset creation property list identifier. +! dapl_id - Dataset access property list identifier. +! +! Programmer: M.S. Breitenfeld +! February 11, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE h5dcreate_anon_f(loc_id, type_id, space_id, dset_id, hdferr, dcpl_id, dapl_id) + +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5dcreate_anon_f +!DEC$endif + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id ! File or group identifier. + INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier. + INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier. + INTEGER(HID_T), INTENT(OUT) :: dset_id ! Dataset identifier. + INTEGER, INTENT(OUT) :: hdferr ! Error code. + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: dcpl_id ! Dataset creation property list identifier. + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: dapl_id ! Dataset access property list identifier. + + INTEGER(HID_T) :: dcpl_id_default + INTEGER(HID_T) :: dapl_id_default + +! +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5dcreate_anon_c(loc_id, type_id, space_id, dcpl_id_default, dapl_id_default, dset_id) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5DCREATE_ANON_C'::h5dcreate_anon_c + !DEC$ ENDIF + !DEC$ATTRIBUTES reference :: name + INTEGER(HID_T), INTENT(IN) :: loc_id + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(HID_T), INTENT(IN) :: space_id + INTEGER(HID_T) :: dcpl_id_default + INTEGER(HID_T) :: dapl_id_default + INTEGER(HID_T), INTENT(OUT) :: dset_id + END FUNCTION h5dcreate_anon_c + END INTERFACE + + dcpl_id_default = H5P_DEFAULT_F + dapl_id_default = H5P_DEFAULT_F + + IF(PRESENT(dcpl_id)) dcpl_id_default = dcpl_id + IF(PRESENT(dapl_id)) dapl_id_default = dapl_id + + hdferr = h5dcreate_anon_c(loc_id, type_id, space_id, dcpl_id_default, dapl_id_default, dset_id) + + END SUBROUTINE h5dcreate_anon_f + +END MODULE H5D + + diff --git a/fortran/src/H5Ff.c b/fortran/src/H5Ff.c index 575d92b..2190d05 100644 --- a/fortran/src/H5Ff.c +++ b/fortran/src/H5Ff.c @@ -508,7 +508,7 @@ nh5fget_name_c(hid_t_f *obj_id, size_t_f *size, _fcd buf, size_t_f *buflen) HGOTO_DONE(FAIL); /* - * Call H5Aget_name function + * Call H5Fget_name function */ if ((size_c = (size_t_f)H5Fget_name((hid_t)*obj_id, c_buf, (size_t)*buflen)) < 0) HGOTO_DONE(FAIL); diff --git a/fortran/src/H5Fff.f90 b/fortran/src/H5Fff.f90 index 3926656..6cf6c05 100644 --- a/fortran/src/H5Fff.f90 +++ b/fortran/src/H5Fff.f90 @@ -58,14 +58,14 @@ !DEC$endif ! - IMPLICIT NONE + IMPLICIT NONE CHARACTER(LEN=*), INTENT(IN) :: name ! Name of the file INTEGER, INTENT(IN) :: access_flags ! File access flags INTEGER(HID_T), INTENT(OUT) :: file_id ! File identifier INTEGER, INTENT(OUT) :: hdferr ! Error code INTEGER(HID_T), OPTIONAL, INTENT(IN) :: creation_prp ! File creation propertly - ! list identifier + ! list identifier INTEGER(HID_T), OPTIONAL, INTENT(IN) :: access_prp ! File access property list ! identifier diff --git a/fortran/src/H5Gf.c b/fortran/src/H5Gf.c index 0316c03..28e5312 100644 --- a/fortran/src/H5Gf.c +++ b/fortran/src/H5Gf.c @@ -16,6 +16,7 @@ /* This files contains C stubs for H5G Fortran APIs */ #include "H5f90.h" +#include "H5Eprivate.h" /*---------------------------------------------------------------------------- * Name: h5gcreate_c @@ -35,9 +36,9 @@ *---------------------------------------------------------------------------*/ int_f nh5gcreate_c(hid_t_f *loc_id, _fcd name, int_f *namelen, size_t_f *size_hint, - hid_t_f *grp_id) + hid_t_f *grp_id, hid_t_f *lcpl_id, hid_t_f *gcpl_id, hid_t_f *gapl_id ) { - hid_t gcpl_id = -1; /* Group creation property list */ + hid_t c_gcpl_id = -1; /* Group creation property list */ char *c_name = NULL; hid_t c_grp_id; int_f ret_value = -1; @@ -51,19 +52,19 @@ nh5gcreate_c(hid_t_f *loc_id, _fcd name, int_f *namelen, size_t_f *size_hint, /* * Call H5Gcreate function. */ - if(*size_hint == OBJECT_NAMELEN_DEFAULT_F ) - c_grp_id = H5Gcreate2((hid_t)*loc_id, c_name, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + if(*size_hint == OBJECT_NAMELEN_DEFAULT_F ){ + c_grp_id = H5Gcreate2((hid_t)*loc_id, c_name,(hid_t)*lcpl_id,(hid_t)*gcpl_id,(hid_t)*gapl_id);} else { - /* Create the group creation property list */ - if((gcpl_id = H5Pcreate(H5P_GROUP_CREATE)) < 0) - goto DONE; + /* Create the group creation property list */ + if((c_gcpl_id = H5Pcreate(H5P_GROUP_CREATE)) < 0) + goto DONE; - /* Set the local heap size hint */ - if(H5Pset_local_heap_size_hint(gcpl_id, (size_t)*size_hint) < 0) - goto DONE; + /* Set the local heap size hint */ + if(H5Pset_local_heap_size_hint(c_gcpl_id, (size_t)*size_hint) < 0) + goto DONE; - /* Create the group */ - c_grp_id = H5Gcreate2((hid_t)*loc_id, c_name, H5P_DEFAULT, gcpl_id, H5P_DEFAULT); + /* Create the group */ + c_grp_id = H5Gcreate2((hid_t)*loc_id, c_name, H5P_DEFAULT, c_gcpl_id, H5P_DEFAULT); } if(c_grp_id < 0) goto DONE; @@ -73,8 +74,8 @@ nh5gcreate_c(hid_t_f *loc_id, _fcd name, int_f *namelen, size_t_f *size_hint, ret_value = 0; DONE: - if(gcpl_id > 0) - H5Pclose(gcpl_id); + if(c_gcpl_id > 0) + H5Pclose(c_gcpl_id); if(c_name) HDfree(c_name); return ret_value; @@ -86,6 +87,7 @@ DONE: * Inputs: loc_id - file or group identifier * name - name of the group * namelen - name length + * gapl_id - Group access property list identifier * Outputs: grp_id - group identifier * Returns: 0 on success, -1 on failure * Programmer: Elena Pourmal @@ -93,7 +95,7 @@ DONE: * Modifications: *---------------------------------------------------------------------------*/ int_f -nh5gopen_c(hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *grp_id) +nh5gopen_c(hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *gapl_id, hid_t_f *grp_id) { char *c_name = NULL; hid_t c_grp_id; @@ -108,7 +110,7 @@ nh5gopen_c(hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *grp_id) /* * Call H5Gopen function. */ - if((c_grp_id = H5Gopen2((hid_t)*loc_id, c_name, H5P_DEFAULT)) < 0) + if((c_grp_id = H5Gopen2((hid_t)*loc_id, c_name, (hid_t)*gapl_id)) < 0) goto DONE; /* Everything OK, set values to return */ @@ -659,3 +661,210 @@ DONE: return ret_value; } +/*---------------------------------------------------------------------------- + * Name: h5gcreate_anon_c + * Purpose: Call H5Gcreate_anon + * Inputs: + * loc_id - Location identifier + * gcpl_id - Group creation property list identifier + * gapl_id - Group access property list identifier + * + * Outputs: grp_id - group identifier + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * February 15, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5gcreate_anon_c(hid_t_f *loc_id, hid_t_f *gcpl_id, hid_t_f *gapl_id, hid_t_f *grp_id) +{ + + int_f ret_value=0; /* Return value */ + + if ((*grp_id = (hid_t_f)H5Gcreate_anon((hid_t)*loc_id,(hid_t)*gcpl_id,(hid_t)*gapl_id)) < 0) + HGOTO_DONE(FAIL); + +done: + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5gget_create_plist_c + * Purpose: Call H5Gget_create_plist + * Inputs: + * grp_id - group identifier + * + * Outputs: gcpl_id - Group creation property list identifier + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * February 15, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5gget_create_plist_c(hid_t_f *grp_id, hid_t_f *gcpl_id ) +{ + int_f ret_value=0; /* Return value */ + + if ((*gcpl_id = (hid_t_f)H5Gget_create_plist((hid_t)*grp_id)) < 0) + HGOTO_DONE(FAIL); + +done: + return ret_value; +} + + +/*---------------------------------------------------------------------------- + * Name: h5gget_info_c + * Purpose: Call H5Gget_info + * Inputs: group_id - Group identifier + * Outputs: + * storage_type - Type of storage for links in group: + * H5G_STORAGE_TYPE_COMPACT: Compact storage + * H5G_STORAGE_TYPE_DENSE: Indexed storage + * H5G_STORAGE_TYPE_SYMBOL_TABLE: Symbol tables, the original HDF5 structure + * + * nlinks - Number of links in group + * max_corder - Current maximum creation order value for group + * + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * February 15, 2008 + * Modifications: N/A + *---------------------------------------------------------------------------*/ +int_f +nh5gget_info_c (hid_t_f *group_id, int_f *storage_type, int_f *nlinks, int_f *max_corder) +{ + + int_f ret_value = 0; /* Return value */ + H5G_info_t ginfo; + + /* + * Call H5Gget_info function. + */ + if(H5Gget_info((hid_t)*group_id,&ginfo) < 0) + HGOTO_DONE(FAIL); + + /* Unpack the structure */ + + *storage_type = (int_f)ginfo.storage_type; + *nlinks = (int_f)ginfo.nlinks; + *max_corder = (int_f)ginfo.max_corder; + +done: + return ret_value; +} + + +/*---------------------------------------------------------------------------- + * Name: h5gget_info_by_idx_c + * Purpose: Call H5Gget_info_by_idx + * Inputs: + * loc_id - File or group identifier + * group_name - Name of group containing group for which information is to be retrieved + * group_namelen - name length + * index_type - Index type + * order - Order of the count in the index + * n - Position in the index of the group for which information is retrieved + * lapl_id - Link access property list + * Outputs: + * storage_type - Type of storage for links in group: + * H5G_STORAGE_TYPE_COMPACT: Compact storage + * H5G_STORAGE_TYPE_DENSE: Indexed storage + * H5G_STORAGE_TYPE_SYMBOL_TABLE: Symbol tables, the original HDF5 structure + * + * nlinks - Number of links in group + * max_corder - Current maximum creation order value for group + * + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * February 18, 2008 + * Modifications: N/A + *---------------------------------------------------------------------------*/ +int_f +nh5gget_info_by_idx_c(hid_t_f *loc_id, _fcd group_name, size_t_f *group_namelen, + int_f *index_type, int_f *order, hsize_t_f *n, hid_t_f *lapl_id, + int_f *storage_type, int_f *nlinks, int_f *max_corder) + +{ + char *c_group_name = NULL; /* Buffer to hold group name C string */ + int_f ret_value = 0; /* Return value */ + H5G_info_t ginfo; + /* + * Convert FORTRAN name to C name + */ + if((c_group_name = HD5f2cstring(group_name, (size_t)*group_namelen)) == NULL) + HGOTO_DONE(FAIL); + + /* + * Call H5Gget_info_by_idx function. + */ + if(H5Gget_info_by_idx((hid_t)*loc_id,c_group_name, (H5_index_t)*index_type,(H5_iter_order_t)*order,(hsize_t)*n, + &ginfo, (hid_t)*lapl_id) < 0) + HGOTO_DONE(FAIL); + + /* Unpack the structure */ + + *storage_type = (int_f)ginfo.storage_type; + *nlinks = (int_f)ginfo.nlinks; + *max_corder = (int_f)ginfo.max_corder; + + done: + if(c_group_name) + HDfree(c_group_name); + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5gget_info_by_name_c + * Purpose: Call H5Gget_info_by_name + * Inputs: + * loc_id - File or group identifier + * group_name - Name of group containing group for which information is to be retrieved + * group_namelen - name length + * lapl_id - Link access property list + * Outputs: + * storage_type - Type of storage for links in group: + * H5G_STORAGE_TYPE_COMPACT: Compact storage + * H5G_STORAGE_TYPE_DENSE: Indexed storage + * H5G_STORAGE_TYPE_SYMBOL_TABLE: Symbol tables, the original HDF5 structure + * + * nlinks - Number of links in group + * max_corder - Current maximum creation order value for group + * + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * February 18, 2008 + * Modifications: N/A + *---------------------------------------------------------------------------*/ +int_f +nh5gget_info_by_name_c(hid_t_f *loc_id, _fcd group_name, size_t_f *group_namelen, hid_t_f *lapl_id, + int_f *storage_type, int_f *nlinks, int_f *max_corder) + +{ + char *c_group_name = NULL; /* Buffer to hold group name C string */ + int_f ret_value = 0; /* Return value */ + H5G_info_t ginfo; + /* + * Convert FORTRAN name to C name + */ + if((c_group_name = HD5f2cstring(group_name, (size_t)*group_namelen)) == NULL) + HGOTO_DONE(FAIL); + + /* + * Call H5Gget_info_by_name function. + */ + if(H5Gget_info_by_name((hid_t)*loc_id, c_group_name, &ginfo, (hid_t)*lapl_id) < 0) + HGOTO_DONE(FAIL); + + /* Unpack the structure */ + + *storage_type = (int_f)ginfo.storage_type; + *nlinks = (int_f)ginfo.nlinks; + *max_corder = (int_f)ginfo.max_corder; + + done: + if(c_group_name) + HDfree(c_group_name); + return ret_value; +} + diff --git a/fortran/src/H5Gff.f90 b/fortran/src/H5Gff.f90 index 5866539..1e4b2b1 100644 --- a/fortran/src/H5Gff.f90 +++ b/fortran/src/H5Gff.f90 @@ -16,10 +16,18 @@ ! ! This file contains Fortran90 interfaces for H5F functions. ! - MODULE H5G - USE H5GLOBAL - - CONTAINS +MODULE H5G + USE H5GLOBAL + +! PRIVATE :: h5gcreate1_f +! PRIVATE :: h5gcreate2_f + +! INTERFACE h5gcreate_f +! MODULE PROCEDURE h5gcreate1_f +! MODULE PROCEDURE h5gcreate2_f +! END INTERFACE + +CONTAINS !---------------------------------------------------------------------- ! Name: h5gcreate_f @@ -35,9 +43,12 @@ ! Success: 0 ! Failure: -1 ! Optional parameters: -! size_hint - a parameter indicating the number of bytes +! size_hint - a parameter indicating the number of bytes ! to reserve for the names that will appear ! in the group +! lcpl_id - Property list for link creation +! gcpl_id - Property list for group creation +! gapl_id - Property list for group access ! ! Programmer: Elena Pourmal ! August 12, 1999 @@ -46,56 +57,170 @@ ! called C functions (it is needed for Windows ! port). March 5, 2001 ! +! Added additional optional paramaters in 1.8 +! MSB - February 27, 2008 +! ! Comment: !---------------------------------------------------------------------- - SUBROUTINE h5gcreate_f(loc_id, name, grp_id, hdferr, size_hint) + SUBROUTINE h5gcreate_f(loc_id, name, grp_id, hdferr, size_hint, lcpl_id, gcpl_id, gapl_id) ! !This definition is needed for Windows DLLs !DEC$if defined(BUILD_HDF5_DLL) !DEC$attributes dllexport :: h5gcreate_f !DEC$endif -! - - IMPLICIT NONE - INTEGER(HID_T), INTENT(IN) :: loc_id ! File or group identifier - CHARACTER(LEN=*), INTENT(IN) :: name ! Name of the group - INTEGER(HID_T), INTENT(OUT) :: grp_id ! Group identifier - INTEGER, INTENT(OUT) :: hdferr ! Error code - INTEGER(SIZE_T), OPTIONAL, INTENT(IN) :: size_hint - ! Parameter indicating - ! the number of bytes - ! to reserve for the - ! names that will appear - ! in the group - INTEGER :: namelen ! Length of the name character string - INTEGER(SIZE_T) :: size_hint_default +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id ! File or group identifier + CHARACTER(LEN=*), INTENT(IN) :: name ! Name of the group + INTEGER(HID_T), INTENT(OUT) :: grp_id ! Group identifier + INTEGER, INTENT(OUT) :: hdferr ! Error code + INTEGER(SIZE_T), OPTIONAL, INTENT(IN) :: size_hint + ! Parameter indicating + ! the number of bytes + ! to reserve for the + ! names that will appear + ! in the group. Set to OBJECT_NAMELEN_DEFAULT_F + ! if using any of the optional + ! parameters lcpl_id, gcpl_id, and/or gapl_id when not + ! using keywords in specifying the optional parameters + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lcpl_id ! Property list for link creation + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: gcpl_id ! Property list for group creation + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: gapl_id ! Property list for group access + + INTEGER(HID_T) :: lcpl_id_default + INTEGER(HID_T) :: gcpl_id_default + INTEGER(HID_T) :: gapl_id_default + + INTEGER :: namelen ! Length of the name character string + INTEGER(SIZE_T) :: size_hint_default -! INTEGER, EXTERNAL :: h5gcreate_c ! MS FORTRAN needs explicit interface for C functions called here. ! - INTERFACE - INTEGER FUNCTION h5gcreate_c(loc_id, name, namelen, & - size_hint_default, grp_id) - USE H5GLOBAL - !DEC$ IF DEFINED(HDF5F90_WINDOWS) - !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5GCREATE_C'::h5gcreate_c - !DEC$ ENDIF - !DEC$ATTRIBUTES reference :: name - INTEGER(HID_T), INTENT(IN) :: loc_id - CHARACTER(LEN=*), INTENT(IN) :: name - INTEGER :: namelen - INTEGER(SIZE_T) :: size_hint_default - INTEGER(HID_T), INTENT(OUT) :: grp_id - END FUNCTION h5gcreate_c - END INTERFACE + INTERFACE + INTEGER FUNCTION h5gcreate_c(loc_id, name, namelen, & + size_hint_default, grp_id, lcpl_id_default, gcpl_id_default, gapl_id_default) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5GCREATE_C'::h5gcreate_c + !DEC$ ENDIF + !DEC$ATTRIBUTES reference :: name + INTEGER(HID_T), INTENT(IN) :: loc_id + CHARACTER(LEN=*), INTENT(IN) :: name + INTEGER :: namelen + INTEGER(SIZE_T) :: size_hint_default + INTEGER(HID_T), INTENT(OUT) :: grp_id + INTEGER(HID_T) :: lcpl_id_default + INTEGER(HID_T) :: gcpl_id_default + INTEGER(HID_T) :: gapl_id_default + END FUNCTION h5gcreate_c + END INTERFACE - size_hint_default = OBJECT_NAMELEN_DEFAULT_F - if (present(size_hint)) size_hint_default = size_hint - namelen = LEN(name) - hdferr = h5gcreate_c(loc_id, name, namelen, size_hint_default, & - grp_id) + size_hint_default = OBJECT_NAMELEN_DEFAULT_F + IF (PRESENT(size_hint)) size_hint_default = size_hint + lcpl_id_default = H5P_DEFAULT_F + IF(PRESENT(lcpl_id)) lcpl_id_default = lcpl_id + gcpl_id_default = H5P_DEFAULT_F + IF(PRESENT(gcpl_id)) gcpl_id_default = gcpl_id + gapl_id_default = H5P_DEFAULT_F + IF(PRESENT(gapl_id)) gapl_id_default = gapl_id + + namelen = LEN(name) + + hdferr = h5gcreate_c(loc_id, name, namelen, size_hint_default, grp_id, & + lcpl_id_default, gcpl_id_default, gapl_id_default) + + END SUBROUTINE h5gcreate_f + +!!$!---------------------------------------------------------------------- +!!$! Name: h5gcreate2_f +!!$! +!!$! Purpose: Creates a new group. +!!$! +!!$! Inputs: +!!$! loc_id - location identifier +!!$! name - group name at the specified location +!!$! Outputs: +!!$! grp_id - group identifier +!!$! hdferr: - error code +!!$! Success: 0 +!!$! Failure: -1 +!!$! Optional parameters: +!!$! +!!$! lcpl_id - Property list for link creation +!!$! gcpl_id - Property list for group creation +!!$! gapl_id - Property list for group access +!!$! +!!$! Programmer: M.S. BREITENFELD +!!$! February 27, 2008 +!!$! +!!$! Modifications: +!!$! +!!$! Comment: Needed to switch the first 2 arguments to avoid conflect +!!$! with h5gcreate1_f +!!$!---------------------------------------------------------------------- +!!$ +!!$ SUBROUTINE h5gcreate2_f(name, loc_id, grp_id, hdferr, & +!!$ lcpl_id, gcpl_id, gapl_id) +!!$! +!!$!This definition is needed for Windows DLLs +!!$!DEC$if defined(BUILD_HDF5_DLL) +!!$!DEC$attributes dllexport :: h5gcreate_f +!!$!DEC$endif +!!$! +!!$ IMPLICIT NONE +!!$ CHARACTER(LEN=*), INTENT(IN) :: name ! Name of the group +!!$ INTEGER(HID_T), INTENT(IN) :: loc_id ! File or group identifier +!!$ INTEGER, INTENT(OUT) :: hdferr ! Error code +!!$ INTEGER(HID_T), INTENT(OUT) :: grp_id ! Group identifier +!!$ +!!$ INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lcpl_id ! Property list for link creation +!!$ INTEGER(HID_T), OPTIONAL, INTENT(IN) :: gcpl_id ! Property list for group creation +!!$ INTEGER(HID_T), OPTIONAL, INTENT(IN) :: gapl_id ! Property list for group access +!!$ +!!$ INTEGER(HID_T) :: lcpl_id_default +!!$ INTEGER(HID_T) :: gcpl_id_default +!!$ INTEGER(HID_T) :: gapl_id_default +!!$ +!!$ INTEGER(SIZE_T) :: OBJECT_NAMELEN_DEFAULT ! Dummy argument to pass to c call +!!$ INTEGER :: namelen ! Length of the name character string +!!$ +!!$! MS FORTRAN needs explicit interface for C functions called here. +!!$! +!!$ INTERFACE +!!$ INTEGER FUNCTION h5gcreate_c(loc_id, name, namelen, & +!!$ OBJECT_NAMELEN_DEFAULT, grp_id, lcpl_id_default, gcpl_id_default, gapl_id_default) +!!$ USE H5GLOBAL +!!$ !DEC$ IF DEFINED(HDF5F90_WINDOWS) +!!$ !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5GCREATE_C'::h5gcreate_c +!!$ !DEC$ ENDIF +!!$ !DEC$ATTRIBUTES reference :: name +!!$ INTEGER(HID_T), INTENT(IN) :: loc_id +!!$ CHARACTER(LEN=*), INTENT(IN) :: name +!!$ INTEGER :: namelen +!!$ INTEGER(SIZE_T) :: OBJECT_NAMELEN_DEFAULT +!!$ INTEGER(HID_T) :: lcpl_id_default +!!$ INTEGER(HID_T) :: gcpl_id_default +!!$ INTEGER(HID_T) :: gapl_id_default +!!$ INTEGER(HID_T), INTENT(OUT) :: grp_id +!!$ END FUNCTION h5gcreate_c +!!$ END INTERFACE +!!$ +!!$ namelen = LEN(name) +!!$ OBJECT_NAMELEN_DEFAULT = OBJECT_NAMELEN_DEFAULT_F +!!$ +!!$ lcpl_id_default = H5P_DEFAULT_F +!!$ IF(PRESENT(lcpl_id)) lcpl_id_default = lcpl_id +!!$ gcpl_id_default = H5P_DEFAULT_F +!!$ IF(PRESENT(gcpl_id)) gcpl_id_default = gcpl_id +!!$ gapl_id_default = H5P_DEFAULT_F +!!$ IF(PRESENT(gapl_id)) gapl_id_default = gapl_id +!!$ +!!$ +!!$ hdferr = h5gcreate_c(loc_id, name, namelen, OBJECT_NAMELEN_DEFAULT, grp_id, & +!!$ lcpl_id_default, gcpl_id_default, gapl_id_default) +!!$ +!!$ END SUBROUTINE h5gcreate2_f - END SUBROUTINE h5gcreate_f !---------------------------------------------------------------------- ! Name: h5gopen_f @@ -111,54 +236,62 @@ ! Success: 0 ! Failure: -1 ! Optional parameters: -! NONE +! gapl_id - Group access property list identifier ! ! Programmer: Elena Pourmal ! August 12, 1999 ! ! Modifications: Explicit Fortran interfaces were added for ! called C functions (it is needed for Windows -! port). March 5, 2001 +! port). March 5, 2001 +! +! Added 1.8 (optional) parameter gapl_id +! February, 2008 M.S. Breitenfeld ! ! Comment: !---------------------------------------------------------------------- - SUBROUTINE h5gopen_f(loc_id, name, grp_id, hdferr) + SUBROUTINE h5gopen_f(loc_id, name, grp_id, hdferr, gapl_id) ! !This definition is needed for Windows DLLs !DEC$if defined(BUILD_HDF5_DLL) !DEC$attributes dllexport :: h5gopen_f !DEC$endif ! - - IMPLICIT NONE - INTEGER(HID_T), INTENT(IN) :: loc_id ! File or group identifier - CHARACTER(LEN=*), INTENT(IN) :: name ! Name of the group - INTEGER(HID_T), INTENT(OUT) :: grp_id ! File identifier - INTEGER, INTENT(OUT) :: hdferr ! Error code - - INTEGER :: namelen ! Length of the name character string - + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id ! File or group identifier + CHARACTER(LEN=*), INTENT(IN) :: name ! Name of the group + INTEGER(HID_T), INTENT(OUT) :: grp_id ! File identifier + INTEGER, INTENT(OUT) :: hdferr ! Error code + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: gapl_id ! Group access property list identifier + + INTEGER(HID_T) :: gapl_id_default + INTEGER :: namelen ! Length of the name character string + ! INTEGER, EXTERNAL :: h5gopen_c ! MS FORTRAN needs explicit interface for C functions called here. ! - INTERFACE - INTEGER FUNCTION h5gopen_c(loc_id, name, namelen, grp_id) - USE H5GLOBAL - !DEC$ IF DEFINED(HDF5F90_WINDOWS) - !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5GOPEN_C'::h5gopen_c - !DEC$ ENDIF - !DEC$ATTRIBUTES reference :: name - INTEGER(HID_T), INTENT(IN) :: loc_id - CHARACTER(LEN=*), INTENT(IN) :: name - INTEGER :: namelen - INTEGER(HID_T), INTENT(OUT) :: grp_id - END FUNCTION h5gopen_c - END INTERFACE - - namelen = LEN(name) - hdferr = h5gopen_c(loc_id, name, namelen, grp_id) + INTERFACE + INTEGER FUNCTION h5gopen_c(loc_id, name, namelen, gapl_id_default, grp_id) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5GOPEN_C'::h5gopen_c + !DEC$ ENDIF + !DEC$ATTRIBUTES reference :: name + INTEGER(HID_T), INTENT(IN) :: loc_id + CHARACTER(LEN=*), INTENT(IN) :: name + INTEGER :: namelen + INTEGER(HID_T), INTENT(IN) :: gapl_id_default + INTEGER(HID_T), INTENT(OUT) :: grp_id + END FUNCTION h5gopen_c + END INTERFACE - END SUBROUTINE h5gopen_f + gapl_id_default = H5P_DEFAULT_F + IF(PRESENT(gapl_id)) gapl_id_default = gapl_id + + namelen = LEN(name) + hdferr = h5gopen_c(loc_id, name, namelen, gapl_id_default, grp_id) + + END SUBROUTINE h5gopen_f !---------------------------------------------------------------------- ! Name: h5gclose_f @@ -929,7 +1062,362 @@ namelen = LEN(name) hdferr = h5gget_comment_c(loc_id, name, namelen, size, buffer) - END SUBROUTINE h5gget_comment_f + END SUBROUTINE h5gget_comment_f + +!---------------------------------------------------------------------- +! Name: H5Gcreate_anon_f +! +! Purpose: Creates a new empty group without linking it into the file structure. +! +! Inputs: +! loc_id - Location identifier +! Outputs: +! grp_id - group identifier +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! gcpl_id - Group creation property list identifier +! gapl_id - Group access property list identifier +! +! Programmer: M.S. Breitenfeld +! February 15, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + SUBROUTINE h5Gcreate_anon_f(loc_id, grp_id, hdferr, gcpl_id, gapl_id) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5gcreate_anon_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id ! File or group identifier + INTEGER(HID_T), INTENT(OUT) :: grp_id ! Group identifier + INTEGER, INTENT(OUT) :: hdferr ! Error code + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: gcpl_id ! Property list for group creation + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: gapl_id ! Property list for group access + + INTEGER(HID_T) :: gcpl_id_default + INTEGER(HID_T) :: gapl_id_default + + INTERFACE + INTEGER FUNCTION h5gcreate_anon_c(loc_id, gcpl_id_default, gapl_id_default, grp_id) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5GCREATE_ANON_C'::h5gcreate_anon_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: loc_id ! File or group identifier + INTEGER(HID_T), INTENT(IN) :: gcpl_id_default ! Property list for group creation + INTEGER(HID_T), INTENT(IN) :: gapl_id_default ! Property list for group access + INTEGER(HID_T), INTENT(OUT) :: grp_id ! Group identifier + END FUNCTION h5gcreate_anon_c + END INTERFACE + + gcpl_id_default = H5P_DEFAULT_F + gapl_id_default = H5P_DEFAULT_F + + IF(PRESENT(gcpl_id)) gcpl_id_default = gcpl_id + IF(PRESENT(gapl_id)) gapl_id_default = gapl_id + + hdferr = h5gcreate_anon_c(loc_id, gcpl_id_default, gapl_id_default, grp_id) + + END SUBROUTINE h5Gcreate_anon_f + +!---------------------------------------------------------------------- +! Name: H5Gget_create_plist_f +! +! Purpose: Gets a group creation property list identifier. +! +! Inputs: +! grp_id - group identifier +! Outputs: +! gcpl_id - Group creation property list identifier +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! +! Programmer: M.S. Breitenfeld +! February 15, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + SUBROUTINE h5gget_create_plist_f(grp_id, gcpl_id, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5gget_create_plist_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: grp_id ! Group identifier + INTEGER(HID_T), INTENT(OUT) :: gcpl_id ! Property list for group creation + INTEGER, INTENT(OUT) :: hdferr ! Error code + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5gget_create_plist_c(grp_id, gcpl_id ) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5GGET_CREATE_PLIST_C'::h5gget_create_plist_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: grp_id + INTEGER(HID_T), INTENT(OUT) :: gcpl_id + END FUNCTION h5gget_create_plist_c + END INTERFACE + + hdferr = h5gget_create_plist_c(grp_id, gcpl_id ) + + END SUBROUTINE h5gget_create_plist_f + +!---------------------------------------------------------------------- +! Name: h5gget_info_f +! +! Purpose: Retrieves information about a group +! +! Inputs: +! group_id - Group identifier +! +! Outputs: NOTE: In C it is defined as a structure: H5G_info_t +! +! storage_type - Type of storage for links in group +! H5G_STORAGE_TYPE_COMPACT: Compact storage +! H5G_STORAGE_TYPE_DENSE: Indexed storage +! H5G_STORAGE_TYPE_SYMBOL_TABLE: Symbol tables, the original HDF5 structure +! nlinks - Number of links in group +! max_corder - Current maximum creation order value for group +! hdferr - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M. S. Breitenfeld +! February 15, 2008 +! +! Modifications: N/A +! +!---------------------------------------------------------------------- + + SUBROUTINE h5gget_info_f(group_id, storage_type, nlinks, max_corder, hdferr) +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5gget_info_f +!DEC$endif + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: group_id ! Group identifier + + INTEGER, INTENT(OUT) :: storage_type ! Type of storage for links in group: + ! H5G_STORAGE_TYPE_COMPACT_F: Compact storage + ! H5G_STORAGE_TYPE_DENSE_F: Indexed storage + ! H5G_STORAGE_TYPE_SYMBOL_TABLE_F: Symbol tables, the original HDF5 structure + INTEGER, INTENT(OUT) :: nlinks ! Number of links in group + INTEGER, INTENT(OUT) :: max_corder ! Current maximum creation order value for group + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! 0 on success and -1 on failure + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5gget_info_c(group_id, storage_type, nlinks, max_corder) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5GGET_INFO_C'::h5gget_info_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: group_id + INTEGER, INTENT(OUT) :: storage_type + INTEGER, INTENT(OUT) :: nlinks + INTEGER, INTENT(OUT) :: max_corder + END FUNCTION h5gget_info_c + END INTERFACE + + hdferr = h5gget_info_c(group_id, storage_type, nlinks, max_corder) + + END SUBROUTINE h5gget_info_f + +!---------------------------------------------------------------------- +! Name: h5gget_info_by_idx_f +! +! Purpose: Retrieves information about a group, according to the group’s position within an index. +! +! Inputs: +! loc_id - File or group identifier +! group_name - Name of group containing group for which information is to be retrieved +! index_type - Index type +! order - Order of the count in the index +! n - Position in the index of the group for which information is retrieved +! +! Outputs: NOTE: In C the following are defined as a structure: H5G_info_t +! +! storage_type - Type of storage for links in group +! H5G_STORAGE_TYPE_COMPACT: Compact storage +! H5G_STORAGE_TYPE_DENSE: Indexed storage +! H5G_STORAGE_TYPE_SYMBOL_TABLE: Symbol tables, the original HDF5 structure +! nlinks - Number of links in group +! max_corder - Current maximum creation order value for group +! hdferr - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! lapl_id - Link access property list +! +! Programmer: M. S. Breitenfeld +! February 18, 2008 +! +! Modifications: N/A +! +!---------------------------------------------------------------------- + + SUBROUTINE h5gget_info_by_idx_f(loc_id, group_name, index_type, order, n, & + storage_type, nlinks, max_corder, hdferr, lapl_id) +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5gget_info_by_idx_f +!DEC$endif + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id ! File or group identifier + CHARACTER(LEN=*), INTENT(IN) :: group_name ! Name of group containing group for which information is to be retrieved + INTEGER, INTENT(IN) :: index_type ! Index type + INTEGER, INTENT(IN) :: order ! Order of the count in the index + INTEGER(HSIZE_T), INTENT(IN) :: n ! Position in the index of the group for which information is retrieved + + INTEGER, INTENT(OUT) :: storage_type ! Type of storage for links in group: + ! H5G_STORAGE_TYPE_COMPACT_F: Compact storage + ! H5G_STORAGE_TYPE_DENSE_F: Indexed storage + ! H5G_STORAGE_TYPE_SYMBOL_TABLE_F: Symbol tables, the original HDF5 structure + INTEGER, INTENT(OUT) :: nlinks ! Number of links in group + INTEGER, INTENT(OUT) :: max_corder ! Current maximum creation order value for group + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! 0 on success and -1 on failure + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list + + INTEGER(HID_T) :: lapl_id_default + INTEGER(SIZE_T) :: group_name_len ! length of group name + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5gget_info_by_idx_c(loc_id, group_name, group_name_len, index_type, order, n, lapl_id_default, & + storage_type, nlinks, max_corder) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5GGET_INFO_BY_IDX_C'::h5gget_info_by_idx_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: loc_id + CHARACTER(LEN=*), INTENT(IN) :: group_name + INTEGER, INTENT(IN) :: index_type + INTEGER, INTENT(IN) :: order + INTEGER(HSIZE_T), INTENT(IN) :: n + INTEGER(HID_T) :: lapl_id_default + INTEGER, INTENT(OUT) :: storage_type + INTEGER, INTENT(OUT) :: nlinks + INTEGER, INTENT(OUT) :: max_corder + + INTEGER(SIZE_T) :: group_name_len + + END FUNCTION h5gget_info_by_idx_c + END INTERFACE + + group_name_len = LEN(group_name) + + lapl_id_default = H5P_DEFAULT_F + IF(present(lapl_id)) lapl_id_default = lapl_id + + hdferr = h5gget_info_by_idx_c(loc_id, group_name, group_name_len, & + index_type, order, n, lapl_id_default, & + storage_type, nlinks, max_corder) + + END SUBROUTINE h5gget_info_by_idx_f + +!---------------------------------------------------------------------- +! Name: h5gget_info_by_name_f +! +! Purpose: Retrieves information about a group. +! +! Inputs: +! loc_id - File or group identifier +! group_name - Name of group containing group for which information is to be retrieved +! +! Outputs: NOTE: In C the following are defined as a structure: H5G_info_t +! +! storage_type - Type of storage for links in group +! H5G_STORAGE_TYPE_COMPACT: Compact storage +! H5G_STORAGE_TYPE_DENSE: Indexed storage +! H5G_STORAGE_TYPE_SYMBOL_TABLE: Symbol tables, the original HDF5 structure +! nlinks - Number of links in group +! max_corder - Current maximum creation order value for group +! hdferr - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! lapl_id - Link access property list +! +! Programmer: M. S. Breitenfeld +! February 18, 2008 +! +! Modifications: N/A +! +!---------------------------------------------------------------------- + + SUBROUTINE h5gget_info_by_name_f(loc_id, group_name, & + storage_type, nlinks, max_corder, hdferr, lapl_id) +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5gget_info_by_name_f +!DEC$endif + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id ! File or group identifier + CHARACTER(LEN=*), INTENT(IN) :: group_name ! Name of group containing group for which information is to be retrieved + + INTEGER, INTENT(OUT) :: storage_type ! Type of storage for links in group: + ! H5G_STORAGE_TYPE_COMPACT_F: Compact storage + ! H5G_STORAGE_TYPE_DENSE_F: Indexed storage + ! H5G_STORAGE_TYPE_SYMBOL_TABLE_F: Symbol tables, the original HDF5 structure + INTEGER, INTENT(OUT) :: nlinks ! Number of links in group + INTEGER, INTENT(OUT) :: max_corder ! Current maximum creation order value for group + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! 0 on success and -1 on failure + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list + + INTEGER(HID_T) :: lapl_id_default + INTEGER(SIZE_T) :: group_name_len ! length of group name + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5gget_info_by_name_c(loc_id, group_name, group_name_len, lapl_id_default, & + storage_type, nlinks, max_corder) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5GGET_INFO_BY_NAME_C'::h5gget_info_by_name_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: loc_id + CHARACTER(LEN=*), INTENT(IN) :: group_name + INTEGER(HID_T), INTENT(IN) :: lapl_id_default + INTEGER, INTENT(OUT) :: storage_type + INTEGER, INTENT(OUT) :: nlinks + INTEGER, INTENT(OUT) :: max_corder + + INTEGER(SIZE_T) :: group_name_len + + END FUNCTION h5gget_info_by_name_c + END INTERFACE + + group_name_len = LEN(group_name) + + lapl_id_default = H5P_DEFAULT_F + IF(PRESENT(lapl_id)) lapl_id_default = lapl_id + hdferr = h5gget_info_by_name_c(loc_id, group_name, group_name_len, lapl_id_default, & + storage_type, nlinks, max_corder) + + END SUBROUTINE h5gget_info_by_name_f - END MODULE H5G +END MODULE H5G diff --git a/fortran/src/H5If.c b/fortran/src/H5If.c index d948259..b4c7660 100644 --- a/fortran/src/H5If.c +++ b/fortran/src/H5If.c @@ -54,7 +54,11 @@ nh5iget_type_c (hid_t_f *obj_id, int_f *type) * Returns: length of the name on success, -1 on failure * Programmer: Elena Pourmal * Wednesday, March 12, 2003 - * Modifications: + * Modifications: + * Changed the size of c_buf_size to c_buf_size + 1, which + * fixes the problem of truncating the string by 1 if the + * exact size of the string (buf_size) is passed in. + * M.S. Breitenfeld, April 21, 2008 *---------------------------------------------------------------------------*/ int_f nh5iget_name_c(hid_t_f *obj_id, _fcd buf, size_t_f *buf_size, size_t_f *name_size) @@ -68,8 +72,8 @@ nh5iget_name_c(hid_t_f *obj_id, _fcd buf, size_t_f *buf_size, size_t_f *name_siz /* * Allocate buffer to hold name of an attribute */ - c_buf_size = (size_t)*buf_size; - c_buf = (char *)HDmalloc(c_buf_size +1); + c_buf_size = (size_t)*buf_size +1; + c_buf = (char *)HDmalloc(c_buf_size); if (c_buf == NULL) return ret_value; /* @@ -82,7 +86,7 @@ nh5iget_name_c(hid_t_f *obj_id, _fcd buf, size_t_f *buf_size, size_t_f *name_siz /* * Convert C name to FORTRAN and place it in the given buffer */ - HD5packFstring(c_buf, _fcdtocp(buf), c_buf_size); + HD5packFstring(c_buf, _fcdtocp(buf), c_buf_size-1); *name_size = (size_t_f)c_size; ret_value = 0; diff --git a/fortran/src/H5Lf.c b/fortran/src/H5Lf.c new file mode 100644 index 0000000..b6f0a8e --- /dev/null +++ b/fortran/src/H5Lf.c @@ -0,0 +1,817 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Copyright by The HDF Group. * + * Copyright by the Board of Trustees of the University of Illinois. * + * All rights reserved. * + * * + * This file is part of HDF5. The full HDF5 copyright notice, including * + * terms governing use, modification, and redistribution, is contained in * + * the files COPYING and Copyright.html. COPYING can be found at the root * + * of the source code distribution tree; Copyright.html can be found at the * + * root level of an installed copy of the electronic HDF5 document set and * + * is linked from the top-level documents page. It can also be found at * + * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have * + * access to either file, you may request a copy from help@hdfgroup.org. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/* This files contains C stubs for H5L Fortran APIs */ + +#include "H5f90.h" +#include "H5Eprivate.h" + +/*---------------------------------------------------------------------------- + * Name: h5lcopy_c + * Purpose: Call H5Lcopy + * Inputs: + * src_loc_id - Location identifier of the source link + * src_name - Name of the link to be copied + * src_namelen - length of the name + * dest_loc_id - Location identifier specifying the destination of the copy + * dest_name - Name to be assigned to the NEW copy + * dest_namelen - Length of the name + * loc_id - Identifier of the file or group containing the object + * name - Name of the link to delete + * lcpl_id - Link creation property list identifier + * lapl_id - Link access property list identifier + * + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * January, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ + +int_f +nh5lcopy_c(hid_t_f *src_loc_id, _fcd src_name, size_t_f *src_namelen, hid_t_f *dest_loc_id, + _fcd dest_name, size_t_f *dest_namelen, + hid_t_f *lcpl_id, hid_t_f *lapl_id) +{ + char *c_src_name = NULL; + char *c_dest_name = NULL; + int ret_value = 0; + + /* + * Convert FORTRAN name to C name + */ + if((c_src_name = HD5f2cstring(src_name, (size_t)*src_namelen)) == NULL) + HGOTO_DONE(FAIL); + if((c_dest_name = HD5f2cstring(dest_name, (size_t)*dest_namelen)) == NULL) + HGOTO_DONE(FAIL); + + /* + * Call H5Lcopy function. + */ + if( H5Lcopy( (hid_t)*src_loc_id, c_src_name, (hid_t) *dest_loc_id, + c_dest_name, (hid_t)*lcpl_id, (hid_t)*lapl_id ) < 0) + HGOTO_DONE(FAIL); + +done: + if(c_src_name) + HDfree(c_src_name); + if(c_dest_name) + HDfree(c_dest_name); + + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5lcreate_external_c + * Purpose: Call H5Lcreate_external_c + * Inputs: + * file_name - Name of the file containing the target object. Neither the file nor the target object is + * required to exist. May be the file the link is being created in. + * obj_name - Path within the target file to the target object. + * link_loc_id - The file or group identifier for the new link. + * link_name - The name of the new link. + * lcpl_id - Link creation property list identifier. + * lapl_id - Link access property list identifier. + * + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * February 29, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ + +int_f +nh5lcreate_external_c(_fcd file_name, size_t_f *file_namelen, _fcd obj_name, size_t_f *obj_namelen, + hid_t_f *link_loc_id, _fcd link_name, size_t_f *link_namelen, + hid_t_f *lcpl_id, hid_t_f *lapl_id) + +{ + char *c_file_name = NULL; + char *c_obj_name = NULL; + char *c_link_name = NULL; + int ret_value = 0; + + /* + * Convert FORTRAN name to C name + */ + if((c_file_name = HD5f2cstring(file_name, (size_t)*file_namelen)) == NULL) + HGOTO_DONE(FAIL); + if((c_obj_name = HD5f2cstring(obj_name, (size_t)*obj_namelen)) == NULL) + HGOTO_DONE(FAIL); + if((c_link_name = HD5f2cstring(link_name, (size_t)*link_namelen)) == NULL) + HGOTO_DONE(FAIL); + + /* + * Call H5Lcopy function. + */ + if( H5Lcreate_external( c_file_name, c_obj_name, (hid_t) *link_loc_id, c_link_name, + (hid_t) *lcpl_id, (hid_t) *lapl_id) < 0) + HGOTO_DONE(FAIL); + +done: + if(c_file_name) + HDfree(c_file_name); + if(c_obj_name) + HDfree(c_obj_name); + if(c_link_name) + HDfree(c_link_name); + + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5ldelete_c + * Purpose: Call H5Ldelete + * Inputs: + * + * loc_id - Identifier of the file or group containing the object + * name - Name of the link to delete + * lapl_id - Link access property list identifier + * namelen - length of name + * + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * January, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ + +int_f +nh5ldelete_c ( hid_t_f *loc_id, _fcd name, size_t_f *namelen, hid_t_f *lapl_id ) +{ + char *c_name = NULL; + int ret_value = 0; + + /* + * Convert FORTRAN name to C name + */ + if((c_name = HD5f2cstring(name, (size_t)*namelen)) == NULL) + HGOTO_DONE(FAIL); + + /* + * Call H5Ldelete function. + */ + if( H5Ldelete( (hid_t)*loc_id, c_name, (hid_t)*lapl_id ) < 0) + HGOTO_DONE(FAIL); + +done: + if(c_name) + HDfree(c_name); + + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5lcreate_soft_c + * Purpose: Call H5Lcreate_soft + * Inputs: + * + * target_path - Path to the target object, which is not required to exist. + * link_loc_id - The file or group identifier for the new link. + * link_name - The name of the new link. + * lcpl_id - Link creation property list identifier. + * lapl_id - Link access property list identifier. + * + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * February 20, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ + +int_f +nh5lcreate_soft_c(_fcd target_path, size_t_f *target_path_len, + hid_t_f *link_loc_id, + _fcd link_name, size_t_f *link_name_len, + hid_t_f *lcpl_id, hid_t_f *lapl_id ) +{ + char *c_target_path = NULL; + char *c_link_name = NULL; + int ret_value = 0; + + /* + * Convert FORTRAN name to C name + */ + if((c_target_path = HD5f2cstring(target_path, (size_t)*target_path_len)) == NULL) + HGOTO_DONE(FAIL); + if((c_link_name = HD5f2cstring(link_name, (size_t)*link_name_len)) == NULL) + HGOTO_DONE(FAIL); + + /* + * Call H5Adelete function. + */ + if ( H5Lcreate_soft(c_target_path,(hid_t)*link_loc_id, c_link_name, (hid_t)*lcpl_id, (hid_t)*lapl_id) < 0) + HGOTO_DONE(FAIL); + + done: + if(c_target_path) + HDfree(c_target_path); + if(c_link_name) + HDfree(c_link_name); + + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5lcreate_hard_c + * Purpose: Call H5Lcreate_hard + * Inputs: + * obj_loc_id - The file or group identifier for the target object. + * obj_name - Name of the target object, which must already exist. + * obj_namelen - Name length + * link_loc_id - The file or group identifier for the new link. + * link_name - The name of the new link. + * link_namelen- Name length + * lcpl_id - Link creation property list identifier. + * lapl_id - Link access property list identifier. + * + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * February 27, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ + +int_f +nh5lcreate_hard_c(hid_t_f *obj_loc_id, _fcd obj_name, size_t_f *obj_namelen, + hid_t_f *link_loc_id, + _fcd link_name, size_t_f *link_namelen, + hid_t_f *lcpl_id, hid_t_f *lapl_id ) +{ + char *c_obj_name = NULL; + char *c_link_name = NULL; + int ret_value = 0; + + /* + * Convert FORTRAN name to C name + */ + if((c_obj_name = HD5f2cstring(obj_name, (size_t)*obj_namelen)) == NULL) + HGOTO_DONE(FAIL); + if((c_link_name = HD5f2cstring(link_name, (size_t)*link_namelen)) == NULL) + HGOTO_DONE(FAIL); + + /* + * Call H5Lcreate_hard function. + */ + if ( H5Lcreate_hard((hid_t)*obj_loc_id, c_obj_name, (hid_t)*link_loc_id, c_link_name, (hid_t)*lcpl_id, (hid_t)*lapl_id) < 0) + HGOTO_DONE(FAIL); + + done: + if(c_obj_name) + HDfree(c_obj_name); + if(c_link_name) + HDfree(c_link_name); + + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5ldelete_by_idx_c + * Purpose: Calls h5ldelete_by_idx + * Inputs: + * loc_id - File or group identifier specifying location of subject group + * group_name - Name of subject group + * group_namelen - Name length + * index_field - Type of index; Possible values are: + * H5_INDEX_UNKNOWN_F = -1 - Unknown index type + * H5_INDEX_NAME_F - Index on names + * H5_INDEX_CRT_ORDER_F - Index on creation order + * H5_INDEX_N_F - Number of indices defined + * order - Order within field or index; Possible values are: + * H5_ITER_UNKNOWN_F - Unknown order + * H5_ITER_INC_F - Increasing order + * H5_ITER_DEC_F - Decreasing order + * H5_ITER_NATIVE_F - No particular order, whatever is fastest + * H5_ITER_N_F - Number of iteration orders + * n - Link for which to retrieve information + * lapl_id - Link access property list + * + * Outputs: N/A + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * February 29, 2008 + * Modifications: N/A + *---------------------------------------------------------------------------*/ +int_f +nh5ldelete_by_idx_c (hid_t_f *loc_id, _fcd group_name, size_t_f *group_namelen, + int_f *index_field, int_f *order, hsize_t_f *n, hid_t_f *lapl_id) +{ + char *c_group_name = NULL; /* Buffer to hold C string */ + H5_index_t c_index_field; + H5_iter_order_t c_order; + int_f ret_value = 0; /* Return value */ + + /* + * Convert FORTRAN name to C name + */ + if((c_group_name = HD5f2cstring(group_name, (size_t)*group_namelen)) == NULL) + HGOTO_DONE(FAIL); + + c_index_field = (H5_index_t)*index_field; + c_order = (H5_iter_order_t)*order; + + /* + * Call H5Ldelete_by_name function. + */ + if(H5Ldelete_by_idx((hid_t)*loc_id, c_group_name, c_index_field, c_order, (hsize_t)*n, (hid_t)*lapl_id) < 0) + HGOTO_DONE(FAIL); + +done: + if(c_group_name) + HDfree(c_group_name); + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5lexists_c + * Purpose: Calls H5Lexists + * Inputs: + * loc_id - Identifier of the file or group to query. + * name - Link name to check + * lapl_id - Link access property list identifier. + * Outputs: + * link_exists_c - returns a positive value, for TRUE, or 0 (zero), for FALSE. + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * February 29, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5lexists_c (hid_t_f *loc_id, _fcd name, size_t_f *namelen, hid_t_f *lapl_id, hid_t_f *link_exists) +{ + char *c_name = NULL; /* Buffer to hold C string */ + int_f ret_value = 0; /* Return value */ + + /* + * Convert FORTRAN name to C name + */ + if((c_name = HD5f2cstring(name, (size_t)*namelen)) == NULL) + HGOTO_DONE(FAIL); + + /* + * Call H5Lexists function. + */ + if((*link_exists = (hid_t_f)H5Lexists((hid_t)*loc_id, c_name, (hid_t)*lapl_id)) < 0) + HGOTO_DONE(FAIL); + +done: + if(c_name) + HDfree(c_name); + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5lget_info_c + * Purpose: Call H5Lget_info + * Inputs: + * link_loc_id - File or group identifier. + * link_name - Name of the link for which information is being sought + * link_namelen - Name length + * lapl_id - Link access property list + * Outputs: + * + * cset - indicates the character set used for link’s name. + * corder - specifies the link’s creation order position. + * corder_valid - indicates whether the value in corder is valid. + * link_type - specifies the link class: + * H5L_LINK_HARD_F - Hard link + * H5L_LINK_SOFT_F - Soft link + * H5L_LINK_EXTERNAL_F - External link + * H5L_LINK_ERROR_F - Error + * address - If the link is a hard link, address specifies the file address that the link points to + * val_size - If the link is a symbolic link, val_size will be the length of the link value + * + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * January, 2008 + * Modifications: N/A + *---------------------------------------------------------------------------*/ +int_f +nh5lget_info_c (hid_t_f *link_loc_id, _fcd link_name, size_t_f *link_namelen, + int_f *cset, int_f *corder, int_f *corder_valid, int_f *link_type, + int_f *address, hsize_t_f *val_size, + hid_t_f *lapl_id) +{ + char *c_link_name = NULL; /* Buffer to hold C string */ + int_f ret_value = 0; /* Return value */ + H5L_info_t link_buff; + + /* + * Convert FORTRAN name to C name + */ + if((c_link_name = HD5f2cstring(link_name, (size_t)*link_namelen)) == NULL) + HGOTO_DONE(FAIL); + /* + * Call H5Linfo function. + */ + if(H5Lget_info((hid_t)*link_loc_id, c_link_name, &link_buff, (hid_t)*lapl_id) < 0) + HGOTO_DONE(FAIL); + + /* Unpack the structure */ + + *cset = (int_f)link_buff.cset; + *corder = (int_f)link_buff.corder; + *corder_valid = 0; + if(link_buff.corder_valid > 0) *corder_valid = 1; + *link_type = (int_f)link_buff.type; + *address = (int_f)link_buff.u.address; + *val_size = (hsize_t)link_buff.u.val_size; + +done: + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5lget_info_by_idx_c + * Purpose: Call H5Lget_info_by_idx + * Inputs: + * loc_id - File or group identifier specifying location of subject group + * group_name - Name of subject group + *group_namelen - Name length + * index_field - Index or field which determines the order + * order - Order within field or index + * n - Link for which to retrieve information + * lapl_id - Link access property list + * Outputs: + * corder_valid - Indicates whether the the creation order data is valid for this attribute + * corder - Is a positive integer containing the creation order of the attribute + * cset - Indicates the character set used for the attribute’s name + * data_size - indicates the size, in the number of characters, of the attribute + * + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * January, 2008 + * Modifications: N/A + *---------------------------------------------------------------------------*/ +int_f +nh5lget_info_by_idx_c(hid_t_f *loc_id, _fcd group_name, size_t_f *group_namelen, + int_f *index_field, int_f *order, hsize_t_f *n, + int_f *corder_valid, int_f *corder, int_f *cset, hsize_t_f *data_size, hid_t_f *lapl_id) +{ + char *c_group_name = NULL; /* Buffer to hold C string */ + H5_index_t c_index_field; + H5_iter_order_t c_order; + int_f ret_value = 0; /* Return value */ + H5L_info_t link_buff; + + /* + * Convert FORTRAN name to C name + */ + if((c_group_name = HD5f2cstring(group_name, (size_t)*group_namelen)) == NULL) + HGOTO_DONE(FAIL); + + c_index_field = (H5_index_t)*index_field; + c_order = (H5_iter_order_t)*order; + /* + * Call H5Linfo_by_idx function. + */ + if(H5Lget_info_by_idx((hid_t)*loc_id, c_group_name, c_index_field, c_order, (hsize_t)*n, + &link_buff, (hid_t)*lapl_id) < 0) + HGOTO_DONE(FAIL); + + /* Unpack the structure */ + + *corder_valid = 0; + if(link_buff.corder_valid > 0) *corder_valid = 1; + + *corder = (int_f)link_buff.corder; + *cset = (int_f)link_buff.cset; + *data_size = (hsize_t)link_buff.u.val_size; + +done: + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: H5Lis_registered_c + * Purpose: Call H5Lis_registered + * Inputs: + * link_cls_id - User-defined link class identifier + * Outputs: NONE + * + * Returns: Returns a positive value if the link class has been registered + * and zero if it is unregistered. Otherwise returns a negative value + * Programmer: M.S. Breitenfeld + * March 3, 2008 + * Modifications: N/A + *---------------------------------------------------------------------------*/ +int_f +nh5lis_registered_c(int_f *link_cls_id) +{ + int_f ret_value = 0; /* Return value */ + H5L_type_t c_link_cls_id; /* User-defined link class identifier */ + htri_t registered; /* registration status */ + + + c_link_cls_id = (H5L_type_t)*link_cls_id; + /* + * Call H5Lis_registered + */ + registered = H5Lis_registered(c_link_cls_id); + + ret_value = (int_f)registered; + + return ret_value; +} + + +/*---------------------------------------------------------------------------- + * Name: h5lmove_c + * Purpose: Call H5Lmove + * Inputs: + * src_loc_id - Original file or group identifier. + * src_name - Original link name. + * src_namelen - name length + * dest_loc_id - Destination file or group identifier. + * dest_name - NEW link name. + * dest_namelen - name length + * Outputs: + * + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * March 3, 2008 + * Modifications: N/A + *---------------------------------------------------------------------------*/ +int_f +nh5lmove_c(hid_t_f *src_loc_id, _fcd src_name, size_t_f *src_namelen, hid_t_f *dest_loc_id, + _fcd dest_name, size_t_f *dest_namelen, hid_t_f *lcpl_id, hid_t_f *lapl_id) + +{ + char *c_src_name = NULL; /* Buffer to hold C string */ + char *c_dest_name = NULL; /* Buffer to hold C string */ + int_f ret_value = 0; /* Return value */ + + /* + * Convert FORTRAN name to C name + */ + if((c_src_name = HD5f2cstring(src_name, (size_t)*src_namelen)) == NULL) + HGOTO_DONE(FAIL); + if((c_dest_name = HD5f2cstring(dest_name, (size_t)*dest_namelen)) == NULL) + HGOTO_DONE(FAIL); + + /* + * Call H5Lmove function. + */ + if(H5Lmove((hid_t)*src_loc_id, c_src_name, (hid_t)*dest_loc_id, + c_dest_name, (hid_t)*lcpl_id, (hid_t)*lapl_id) < 0) + HGOTO_DONE(FAIL); +done: + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5lget_name_by_idx_c + * Purpose: Call H5Lget_name_by_idx + * Inputs: + * loc_id - File or group identifier specifying location of subject group + * group_name - Name of subject group + * index_field - Index or field which determines the order + * order - Order within field or index + * n - Link for which to retrieve information + * size - Maximum number of characters of link value to be returned. + * lapl_id - Link access property list + * Outputs: + * name - Buffer in which link value is returned + * size - The size of the link name on success + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * March 10, 2008 + * Modifications: N/A + *---------------------------------------------------------------------------*/ +int_f +nh5lget_name_by_idx_c(hid_t_f *loc_id, _fcd group_name, size_t_f *group_namelen, + int_f *index_field, int_f *order, hsize_t_f *n, + size_t_f *size, _fcd name, hid_t_f *lapl_id) +{ + char *c_group_name = NULL; /* Buffer to hold C string */ + char *c_name = NULL; /* Buffer to hold C string */ + int_f ret_value = 0; /* Return value */ + size_t c_size; + + /* + * Convert FORTRAN name to C name + */ + if((c_group_name = HD5f2cstring(group_name, (size_t)*group_namelen)) == NULL) + HGOTO_DONE(FAIL); + + c_size = (size_t)*size + 1; + /* + * Allocate buffer to hold name of an attribute + */ + if ((c_name = HDmalloc(c_size)) == NULL) + HGOTO_DONE(FAIL); + + if((*size = (size_t)H5Lget_name_by_idx((hid_t)*loc_id, c_group_name, (H5_index_t)*index_field, + (H5_iter_order_t)*order, (hsize_t)*n,c_name, c_size, (hid_t)*lapl_id)) < 0) + HGOTO_DONE(FAIL); + + /* + * Convert C name to FORTRAN and place it in the given buffer + */ + if(c_name != NULL) + HD5packFstring(c_name, _fcdtocp(name), c_size-1); +done: + if(c_group_name) HDfree(c_group_name); + if(c_name) HDfree(c_name); + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5lget_val_c + * Purpose: Call H5Lget_val + * Inputs: + * link_loc_id - File or group identifier. + * link_name - Name of the link for which valrmation is being sought + * link_namelen - Name length + * size - Maximum number of characters of link value to be returned. + * lapl_id - Link access property list + * Outputs: + * linkval_buff - The buffer to hold the returned link value. + * + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * March 3, 2008 + * Modifications: N/A + *---------------------------------------------------------------------------*/ +/* int_f */ +/* nh5lget_val_c (hid_t_f *link_loc_id, _fcd link_name, size_t_f *link_namelen, */ +/* size_t_f *size, _fcd linkval_buff, */ +/* hid_t_f *lapl_id) */ +/* { */ +/* char *c_link_name = NULL; /\* Buffer to hold C string *\/ */ +/* int_f ret_value = 0; /\* Return value *\/ */ +/* void *c_linkval_buff = NULL; */ + +/* /\* */ +/* * Convert FORTRAN name to C name */ +/* *\/ */ +/* if((c_link_name = HD5f2cstring(link_name, (size_t)*link_namelen)) == NULL) */ +/* HGOTO_DONE(FAIL); */ +/* /\* */ +/* * Call H5Lval function. */ +/* *\/ */ +/* if(H5Lget_val((hid_t)*link_loc_id, c_link_name, &linkval_buff, (size_t)*size, (hid_t)*lapl_id) < 0) */ +/* HGOTO_DONE(FAIL); */ +/* /\* */ +/* * Convert C name to FORTRAN */ +/* *\/ */ +/* HD5packFstring(c_buf, _fcdtocp(buf), c_bufsize-1); */ + + +/* done: */ +/* return ret_value; */ +/* } */ + + +/*---------------------------------------------------------------------------- + * Name: H5Lregistered_c + * Purpose: Call H5Lregistered + * Inputs: + * + * Inputs: + * version - Version number of this struct + * class_id - Link class identifier + * comment - Comment for debugging + * comment_len - Comment for debugging + * create_func - Callback during link creation + * create_func_len - length + * move_func - Callback after moving link + * move_func_len - length + * copy_func - Callback after copying link + * copy_func_len - length + * trav_func - The main traversal function + * trav_func_len - length + * del_func - Callback for link deletion + * del_func_len - length + * query_func - Callback for queries + * query_func_len - length + * + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * February 3, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ + +/* int_f */ + +/* nh5lregistered_c(int_f *version, int_f *class_id, */ +/* _fcd comment, size_t_f *comment_len, */ +/* _fcd create_func, size_t_f *create_func_len, */ +/* _fcd move_func, size_t_f *move_func_len, */ +/* _fcd copy_func, size_t_f *copy_func_len, */ +/* _fcd trav_func, size_t_f *trav_func_len, */ +/* _fcd del_func , size_t_f *del_func_len, */ +/* _fcd query_func, size_t_f *query_func_len) */ +/* { */ +/* char *c_comment = NULL; */ +/* char *c_create_func = NULL; */ +/* char *c_move_func = NULL; */ +/* char *c_copy_func = NULL; */ +/* char *c_trav_func = NULL; */ +/* char *c_del_func = NULL; */ +/* char *c_query_func = NULL; */ + +/* H5L_class_t class_t; */ + +/* int ret_value = 0; */ + +/* /\* */ +/* * Convert FORTRAN name to C name */ +/* *\/ */ +/* if((c_comment = HD5f2cstring(c_comment, (size_t)*sc_comment_len)) == NULL) */ +/* HGOTO_DONE(FAIL); */ +/* if((c_create_func = HD5f2cstring(c_create_func, (size_t)*c_create_func_len)) == NULL) */ +/* HGOTO_DONE(FAIL); */ +/* if((c_move_func = HD5f2cstring(c_move_func, (size_t)*sc_move_func_len)) == NULL) */ +/* HGOTO_DONE(FAIL); */ +/* if((c_copy_func = HD5f2cstring(c_copy_func, (size_t)*c_copy_func_len)) == NULL) */ +/* HGOTO_DONE(FAIL); */ +/* if((c_trav_func = HD5f2cstring(c_trav_func, (size_t)*sc_trav_func_len)) == NULL) */ +/* HGOTO_DONE(FAIL); */ +/* if((c_del_func = HD5f2cstring(c_del_func, (size_t)*c_del_func_len)) == NULL) */ +/* HGOTO_DONE(FAIL); */ +/* if((c_query_func = HD5f2cstring(c_query_func, (size_t)*c_query_func_len)) == NULL) */ +/* HGOTO_DONE(FAIL); */ +/* /\* */ +/* * Pack into C struct H5L_class_t */ +/* *\/ */ +/* int version; /\* Version number of this struct *\/ */ +/* H5L_type_t class_id; /\* Link class identifier *\/ */ +/* const char *comment; /\* Comment for debugging *\/ */ +/* H5L_create_func_t create_func; /\* Callback during link creation *\/ */ +/* H5L_move_func_t move_func; /\* Callback after moving link *\/ */ +/* H5L_copy_func_t copy_func; /\* Callback after copying link *\/ */ +/* H5L_traverse_func_t trav_func; /\* The main traversal function *\/ */ +/* H5L_delete_func_t del_func; /\* Callback for link deletion *\/ */ +/* H5L_query_func_t query_func; /\* Callback for queries *\/ */ + +/* class_t.version = (int)*version; */ +/* class_t.class_id = (H5L_type_t)*class_id; */ +/* class_t.comment = c_comment; */ +/* class_t. */ + +/* /\* */ +/* * Call H5Lcopy function. */ +/* *\/ */ +/* if( H5Lcopy( (hid_t)*src_loc_id, c_src_name, (hid_t) *dest_loc_id, */ +/* c_dest_name, (hid_t)*lcpl_id, (hid_t)*lapl_id ) < 0) */ +/* HGOTO_DONE(FAIL); */ + +/* done: */ +/* if(c_src_name) */ +/* HDfree(c_src_name); */ +/* if(c_dest_name) */ +/* HDfree(c_dest_name); */ + +/* return ret_value; */ +/* } */ + +/*---------------------------------------------------------------------------- + * Name: h5lget_val_c + * Purpose: Call H5Lget_val_c + * Inputs: + * link_loc_id - File or group identifier. + * link_name - Link whose value is to be returned. + * link_name_len - length of link_name + * size - Maximum number of characters of link value to be returned. + * lapl_id - List access property list identifier + * Outputs: + * linkval_buff - The buffer to hold the returned link value. + * + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * April 11, 2008 + * Modifications: N/A + *---------------------------------------------------------------------------*/ +int_f +nh5lget_val_c(hid_t_f *link_loc_id, _fcd link_name, size_t_f *link_namelen, size_t_f *size, + void *linkval_buff, hid_t_f *lapl_id) +{ + int_f ret_value = 0; /* Return value */ + char *c_link_name = NULL; /* Buffer to hold C string */ + + /* + * Convert FORTRAN name to C name + */ + if((c_link_name = HD5f2cstring(link_name, (size_t)*link_namelen)) == NULL) + HGOTO_DONE(FAIL); + + /* + * Call H5Lget_val + */ + + if(H5Lget_val( (hid_t)*link_loc_id, c_link_name, &linkval_buff, (size_t)*size, (hid_t)*lapl_id )< 0) + HGOTO_DONE(FAIL); + +done: + return ret_value; +} + + diff --git a/fortran/src/H5Lff.f90 b/fortran/src/H5Lff.f90 new file mode 100644 index 0000000..5594342 --- /dev/null +++ b/fortran/src/H5Lff.f90 @@ -0,0 +1,1323 @@ +! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +! Copyright by The HDF Group. * +! Copyright by the Board of Trustees of the University of Illinois. * +! All rights reserved. * +! * +! This file is part of HDF5. The full HDF5 copyright notice, including * +! terms governing use, modification, and redistribution, is contained in * +! the files COPYING and Copyright.html. COPYING can be found at the root * +! of the source code distribution tree; Copyright.html can be found at the * +! root level of an installed copy of the electronic HDF5 document set and * +! is linked from the top-level documents page. It can also be found at * +! http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have * +! access to either file, you may request a copy from help@hdfgroup.org. * +! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +! +! +! This file contains Fortran90 interfaces for H5L functions. +! +MODULE H5L + + USE H5GLOBAL + +CONTAINS + +!---------------------------------------------------------------------- +! Name: h5lcopy_f +! +! Purpose: Copies a link from one location to another. +! +! Inputs: +! src_loc_id - Location identifier of the source link +! src_name - Name of the link to be copied +! dest_loc_id - Location identifier specifying the destination of the copy +! dest_name - Name to be assigned to the NEW copy +! loc_id - Identifier of the file or group containing the object +! name - Name of the link to delete +! +! Outputs: +! hdferr - error code: +! Success: 0 +! Failure: -1 +! Optional parameters: +! lcpl_id - Link creation property list identifier +! lapl_id - Link access property list identifier +! +! Programmer: M.S. Breitenfeld +! February 27, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + SUBROUTINE h5lcopy_f(src_loc_id, src_name, dest_loc_id, dest_name, hdferr, & + lcpl_id, lapl_id) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5lcopy +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: src_loc_id ! Location identifier of the source link + CHARACTER(LEN=*), INTENT(IN) :: src_name ! Name of the link to be copied + INTEGER(HID_T), INTENT(IN) :: dest_loc_id ! Location identifier specifying the destination of the copy + CHARACTER(LEN=*), INTENT(IN) :: dest_name ! Name to be assigned to the NEW copy + + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! 0 on success and -1 on failure + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lcpl_id ! Link creation property list identifier + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list identifier + + INTEGER(HID_T) :: lcpl_id_default + INTEGER(HID_T) :: lapl_id_default + + INTEGER(SIZE_T) :: src_namelen + INTEGER(SIZE_T) :: dest_namelen + + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5lcopy_c(src_loc_id, src_name, src_namelen, dest_loc_id, dest_name, dest_namelen, & + lcpl_id_default, lapl_id_default) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5LCOPY_C'::h5lcopy_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: src_loc_id + CHARACTER(LEN=*), INTENT(IN) :: src_name + INTEGER(HID_T), INTENT(IN) :: dest_loc_id + CHARACTER(LEN=*), INTENT(IN) :: dest_name + + INTEGER(HID_T) :: lcpl_id_default + INTEGER(HID_T) :: lapl_id_default + + INTEGER(SIZE_T) :: src_namelen + INTEGER(SIZE_T) :: dest_namelen + END FUNCTION h5lcopy_c + END INTERFACE + + src_namelen = LEN(src_name) + dest_namelen = LEN(dest_name) + + lcpl_id_default = H5P_DEFAULT_F + IF(PRESENT(lcpl_id)) lcpl_id_default = lcpl_id + lapl_id_default = H5P_DEFAULT_F + IF(PRESENT(lapl_id)) lapl_id_default = lapl_id + + hdferr = h5lcopy_c(src_loc_id, src_name, src_namelen, dest_loc_id, dest_name, dest_namelen, & + lcpl_id_default, lapl_id_default) + + END SUBROUTINE h5lcopy_f + +!---------------------------------------------------------------------- +! Name: h5ldelete_f +! +! Purpose: Removes a link from a group. +! +! Inputs: +! loc_id - Identifier of the file or group containing the object +! name - Name of the link to delete +! +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! lapl_id - Link access property list identifier +! +! Programmer: M.S. Breitenfeld +! January, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + SUBROUTINE h5ldelete_f(loc_id, name, hdferr, lapl_id) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5ldelete_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id ! Identifier of the file or group containing the object + CHARACTER(LEN=*), INTENT(IN) :: name ! Name of the link to delete + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! 0 on success and -1 on failure + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list identifier + INTEGER(HID_T) :: lapl_id_default + INTEGER(SIZE_T) :: namelen + + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5ldelete_c(loc_id, name, namelen, lapl_id_default) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5LDELETE_C'::h5ldelete_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: loc_id + CHARACTER(LEN=*), INTENT(IN) :: name + INTEGER(HID_T) :: lapl_id_default + INTEGER(SIZE_T) :: namelen + END FUNCTION h5ldelete_c + END INTERFACE + + namelen = LEN(name) + + lapl_id_default = H5P_DEFAULT_F + IF(PRESENT(lapl_id)) lapl_id_default = lapl_id + + hdferr = h5ldelete_c(loc_id, name, namelen, lapl_id_default) + + END SUBROUTINE h5ldelete_f + +!---------------------------------------------------------------------- +! Name: H5Lcreate_soft_f +! +! Purpose: Creates a soft link to an object. +! +! Inputs: +! target_path - Path to the target object, which is not required to exist. +! link_loc_id - The file or group identifier for the new link. +! link_name - The name of the new link. +! +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! lcpl_id - Link creation property list identifier. +! lapl_id - Link access property list identifier. +! +! Programmer: M.S. Breitenfeld +! February 20, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + SUBROUTINE h5lcreate_soft_f(target_path, link_loc_id, link_name, hdferr, lcpl_id, lapl_id) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5lcreate_soft_f +!DEC$endif +! + IMPLICIT NONE + CHARACTER(LEN=*), INTENT(IN) :: target_path ! Path to the target object, which is not required to exist. + INTEGER(HID_T), INTENT(IN) :: link_loc_id ! The file or group identifier for the new link. + CHARACTER(LEN=*), INTENT(IN) :: link_name ! The name of the new link. + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! 0 on success and -1 on failure + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lcpl_id ! Link creation property list identifier. + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list identifier. + + INTEGER(HID_T) :: lcpl_id_default + INTEGER(HID_T) :: lapl_id_default + INTEGER(SIZE_T) :: target_path_len + INTEGER(SIZE_T) :: link_name_len + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5lcreate_soft_c(target_path, target_path_len, & + link_loc_id, & + link_name,link_name_len, & + lcpl_id_default, lapl_id_default ) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5LCREATE_SOFT_C'::h5lcreate_soft_c + !DEC$ ENDIF + CHARACTER(LEN=*), INTENT(IN) :: target_path + INTEGER(SIZE_T) :: target_path_len + INTEGER(HID_T), INTENT(IN) :: link_loc_id + CHARACTER(LEN=*), INTENT(IN) :: link_name + INTEGER(SIZE_T) :: link_name_len + INTEGER(HID_T) :: lcpl_id_default + INTEGER(HID_T) :: lapl_id_default + END FUNCTION h5lcreate_soft_c + END INTERFACE + + target_path_len = LEN(target_path) + link_name_len = LEN(link_name) + + lcpl_id_default = H5P_DEFAULT_F + IF(PRESENT(lcpl_id)) lcpl_id_default = lcpl_id + lapl_id_default = H5P_DEFAULT_F + IF(PRESENT(lapl_id)) lapl_id_default = lapl_id + + hdferr = h5lcreate_soft_c(target_path, target_path_len,& + link_loc_id, & + link_name, link_name_len, & + lcpl_id_default, lapl_id_default ) + + END SUBROUTINE h5lcreate_soft_f + +!---------------------------------------------------------------------- +! Name: H5Lcreate_hard_f +! +! Purpose: Creates a hard link to an object. +! +! Inputs: +! +! obj_loc_id - The file or group identifier for the target object. +! obj_name - Name of the target object, which must already exist. +! link_loc_id - The file or group identifier for the new link. +! link_name - The name of the new link. +! +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! lcpl_id - Link creation property list identifier. +! lapl_id - Link access property list identifier. +! +! Programmer: M.S. Breitenfeld +! February 27, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + SUBROUTINE h5lcreate_hard_f(obj_loc_id, obj_name, link_loc_id, link_name, hdferr, lcpl_id, lapl_id) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5lcreate_hard_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: obj_loc_id ! The file or group identifier for the target object. + CHARACTER(LEN=*), INTENT(IN) :: obj_name ! Name of the target object, which must already exist. + INTEGER(HID_T), INTENT(IN) :: link_loc_id ! The file or group identifier for the new link. + CHARACTER(LEN=*), INTENT(IN) :: link_name ! The name of the new link. + + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! 0 on success and -1 on failure + + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lcpl_id ! Link creation property list identifier. + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list identifier. + + INTEGER(HID_T) :: lcpl_id_default + INTEGER(HID_T) :: lapl_id_default + + INTEGER(SIZE_T) :: obj_namelen + INTEGER(SIZE_T) :: link_namelen + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5lcreate_hard_c(obj_loc_id, obj_name, obj_namelen, & + link_loc_id, link_name, link_namelen, lcpl_id_default, lapl_id_default) + + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5LCREATE_HARD_C'::h5lcreate_hard_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: obj_loc_id + CHARACTER(LEN=*), INTENT(IN) :: obj_name + INTEGER(HID_T), INTENT(IN) :: link_loc_id + CHARACTER(LEN=*), INTENT(IN) :: link_name + INTEGER(SIZE_T) :: obj_namelen + INTEGER(SIZE_T) :: link_namelen + INTEGER(HID_T) :: lcpl_id_default + INTEGER(HID_T) :: lapl_id_default + END FUNCTION h5lcreate_hard_c + END INTERFACE + obj_namelen = LEN(obj_name) + link_namelen = LEN(link_name) + + lcpl_id_default = H5P_DEFAULT_F + IF(PRESENT(lcpl_id)) lcpl_id_default = lcpl_id + lapl_id_default = H5P_DEFAULT_F + IF(PRESENT(lapl_id)) lapl_id_default = lapl_id + + hdferr = h5lcreate_hard_c(obj_loc_id, obj_name, obj_namelen, & + link_loc_id, link_name, link_namelen, lcpl_id_default, lapl_id_default) + + END SUBROUTINE h5lcreate_hard_f + +!---------------------------------------------------------------------- +! Name: H5Lcreate_external_f +! +! Purpose: Creates a soft link to an object in a different file. +! +! Inputs: +! +! file_name - Name of the file containing the target object. Neither the file nor the target object is +! required to exist. May be the file the link is being created in. +! obj_name - Path within the target file to the target object. +! link_loc_id - The file or group identifier for the new link. +! link_name - The name of the new link. +! +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! lcpl_id - Link creation property list identifier. +! lapl_id - Link access property list identifier. +! +! Programmer: M.S. Breitenfeld +! February 27, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + SUBROUTINE h5lcreate_external_f(file_name, obj_name, link_loc_id, link_name, hdferr, lcpl_id, lapl_id) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5lcreate_external_f +!DEC$endif +! + IMPLICIT NONE + CHARACTER(LEN=*), INTENT(IN) :: file_name ! Name of the file containing the target object. Neither + ! the file nor the target object is required to exist. + ! May be the file the link is being created in. + CHARACTER(LEN=*), INTENT(IN) :: obj_name ! Name of the target object, which must already exist. + INTEGER(HID_T), INTENT(IN) :: link_loc_id ! The file or group identifier for the new link. + CHARACTER(LEN=*), INTENT(IN) :: link_name ! The name of the new link. + + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! 0 on success and -1 on failure + + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lcpl_id ! Link creation property list identifier. + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list identifier. + + INTEGER(HID_T) :: lcpl_id_default + INTEGER(HID_T) :: lapl_id_default + + INTEGER(SIZE_T) :: file_namelen + INTEGER(SIZE_T) :: obj_namelen + INTEGER(SIZE_T) :: link_namelen + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5lcreate_external_c(file_name, file_namelen, obj_name, obj_namelen, & + link_loc_id, link_name, link_namelen, lcpl_id_default, lapl_id_default) + + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5LCREATE_EXTERNAL_C'::h5lcreate_external_c + !DEC$ ENDIF + CHARACTER(LEN=*), INTENT(IN) :: file_name + CHARACTER(LEN=*), INTENT(IN) :: obj_name + INTEGER(HID_T), INTENT(IN) :: link_loc_id + CHARACTER(LEN=*), INTENT(IN) :: link_name + INTEGER(SIZE_T) :: file_namelen + INTEGER(SIZE_T) :: obj_namelen + INTEGER(SIZE_T) :: link_namelen + INTEGER(HID_T) :: lcpl_id_default + INTEGER(HID_T) :: lapl_id_default + END FUNCTION h5lcreate_external_c + END INTERFACE + file_namelen = LEN(file_name) + obj_namelen = LEN(obj_name) + link_namelen = LEN(link_name) + + lcpl_id_default = H5P_DEFAULT_F + IF(PRESENT(lcpl_id)) lcpl_id_default = lcpl_id + lapl_id_default = H5P_DEFAULT_F + IF(PRESENT(lapl_id)) lapl_id_default = lapl_id + + hdferr = h5lcreate_external_c(file_name, file_namelen, obj_name, obj_namelen, & + link_loc_id, link_name, link_namelen, lcpl_id_default, lapl_id_default) + + END SUBROUTINE h5lcreate_external_f + +!---------------------------------------------------------------------- +! Name: h5ldelete_by_idx_f +! +! Purpose: Removes the nth link in a group. +! Inputs: +! loc_id - File or group identifier specifying location of subject group +! group_name - Name of subject group +! index_field - Type of index; Possible values are: +! +! H5_INDEX_UNKNOWN_F = -1 - Unknown index type +! H5_INDEX_NAME_F - Index on names +! H5_INDEX_CRT_ORDER_F - Index on creation order +! H5_INDEX_N_F - Number of indices defined +! +! order - Order within field or index; Possible values are: +! +! H5_ITER_UNKNOWN_F - Unknown order +! H5_ITER_INC_F - Increasing order +! H5_ITER_DEC_F - Decreasing order +! H5_ITER_NATIVE_F - No particular order, whatever is fastest +! H5_ITER_N_F - Number of iteration orders +! +! n - Link for which to retrieve information +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! lapl_id - Link access property list +! +! Programmer: M.S. Breitenfeld +! February 29, 2008 +! +! Modifications: N/A +! +!---------------------------------------------------------------------- + SUBROUTINE h5ldelete_by_idx_f(loc_id, group_name, index_field, order, n, hdferr, lapl_id) +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5ldelete_by_idx_f +!DEC$endif + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id ! Identifer for object to which attribute is attached + CHARACTER(LEN=*), INTENT(IN) :: group_name ! Name of object, relative to location, + ! from which attribute is to be removed + INTEGER, INTENT(IN) :: index_field ! Type of index; Possible values are: + ! H5_INDEX_UNKNOWN_F - Unknown index type + ! H5_INDEX_NAME_F - Index on names + ! H5_INDEX_CRT_ORDER_F - Index on creation order + ! H5_INDEX_N_F - Number of indices defined + INTEGER, INTENT(IN) :: order ! Order in which to iterate over index; Possible values are: + ! H5_ITER_UNKNOWN_F - Unknown order + ! H5_ITER_INC_F - Increasing order + ! H5_ITER_DEC_F - Decreasing order + ! H5_ITER_NATIVE_F - No particular order, whatever is fastest + ! H5_ITER_N_F - Number of iteration orders + INTEGER(HSIZE_T), INTENT(IN) :: n ! Offset within index + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! 0 on success and -1 on failure + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list + + INTEGER(HID_T) :: lapl_id_default + INTEGER(SIZE_T) :: group_namelen + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5ldelete_by_idx_c(loc_id, group_name, group_namelen, index_field, order, n, lapl_id_default) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5LDELETE_BY_IDX_C'::h5ldelete_by_idx_c + !DEC$ ENDIF + !DEC$ATTRIBUTES reference :: name + INTEGER(HID_T), INTENT(IN) :: loc_id + CHARACTER(LEN=*), INTENT(IN) :: group_name + INTEGER, INTENT(IN) :: index_field + INTEGER, INTENT(IN) :: order + INTEGER(HSIZE_T), INTENT(IN) :: n + INTEGER(HID_T) :: lapl_id_default + INTEGER(SIZE_T) :: group_namelen + END FUNCTION h5ldelete_by_idx_c + END INTERFACE + + lapl_id_default = H5P_DEFAULT_F + IF(PRESENT(lapl_id)) lapl_id_default = lapl_id + + group_namelen = LEN(group_name) + hdferr = h5ldelete_by_idx_c(loc_id, group_name, group_namelen, index_field, order, n, lapl_id_default) + + END SUBROUTINE h5ldelete_by_idx_f + +!---------------------------------------------------------------------- +! Name: H5Lexists_f +! +! Purpose: Check if a link with a particular name exists in a group. +! +! Inputs: +! loc_id - Identifier of the file or group to query. +! name - Link name to check +! +! Outputs: +! link_exists - link exists status (.TRUE.,.FALSE.) +! hdferr - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! lapl_id - Link access property list identifier. +! +! Programmer: M. S. Breitenfeld +! February 29, 2008 +! +! Modifications: N/A +! +!---------------------------------------------------------------------- + SUBROUTINE h5lexists_f(loc_id, name, link_exists, hdferr, lapl_id) + +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5lexists_f +!DEC$endif + + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id ! Identifier of the file or group to query. + CHARACTER(LEN=*), INTENT(IN) :: name ! Link name to check. + LOGICAL, INTENT(OUT) :: link_exists ! .TRUE. if exists, .FALSE. otherwise + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! 0 on success and -1 on failure + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id + ! Link access property list identifier. + INTEGER :: link_exists_c + INTEGER(HID_T) :: lapl_id_default + INTEGER(SIZE_T) :: namelen +! +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5lexists_c(loc_id, name, namelen, lapl_id_default, link_exists_c) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5LEXISTS_C'::h5lexists_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: loc_id + CHARACTER(LEN=*), INTENT(IN) :: name + INTEGER(SIZE_T), INTENT(IN) :: namelen + INTEGER, INTENT(OUT) :: link_exists_c + INTEGER(HID_T) :: lapl_id_default + + END FUNCTION h5lexists_c + END INTERFACE + + namelen = LEN(name) + + lapl_id_default = H5P_DEFAULT_F + IF(PRESENT(lapl_id)) lapl_id_default = lapl_id + + hdferr = h5lexists_c(loc_id, name, namelen, lapl_id_default, link_exists_c) + + link_exists = .FALSE. + IF(link_exists_c.GT.0) link_exists = .TRUE. + + END SUBROUTINE h5lexists_f + +!---------------------------------------------------------------------- +! Name: h5lget_info_f +! +! Purpose: Returns information about a link. +! +! Inputs: +! link_loc_id - File or group identifier. +! link_name - Name of the link for which information is being sought +! +! Outputs: NOTE: In C these are contained in the structure H5L_info_t +! +! cset - indicates the character set used for link’s name. +! corder - specifies the link’s creation order position. +!corder_valid - indicates whether the value in corder is valid. +! link_type - specifies the link class: +! H5L_LINK_HARD_F - Hard link +! H5L_LINK_SOFT_F - Soft link +! H5L_LINK_EXTERNAL_F - External link +! H5L_LINK_ERROR_ F - Error +! address - If the link is a hard link, address specifies the file address that the link points to +! val_size - If the link is a symbolic link, val_size will be the length of the link value +! hdferr - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! lapl_id - Link access property list +! +! Programmer: M. S. Breitenfeld +! February 29, 2008 +! +! Modifications: N/A +! +!---------------------------------------------------------------------- + + SUBROUTINE h5lget_info_f(link_loc_id, link_name, & + cset, corder, f_corder_valid, link_type, address, val_size, & + hdferr, lapl_id) +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5lget_info_f +!DEC$endif + IMPLICIT NONE + + INTEGER(HID_T), INTENT(IN) :: link_loc_id ! File or group identifier. + CHARACTER(LEN=*), INTENT(IN) :: link_name ! Name of the link for which information is being sought + +! Outputs: NOTE: In C these are contained in the structure H5L_info_t + INTEGER, INTENT(OUT) :: cset ! Indicates the character set used for the link’s name. + INTEGER, INTENT(OUT) :: corder ! Specifies the link’s creation order position. + LOGICAL, INTENT(OUT) :: f_corder_valid ! Indicates whether the value in corder is valid. + INTEGER, INTENT(OUT) :: link_type ! Specifies the link class: + ! H5L_LINK_HARD_F - Hard link + ! H5L_LINK_SOFT_F - Soft link + ! H5L_LINK_EXTERNAL_F - External link + ! H5L_LINK_ERROR _F - Error + INTEGER, INTENT(OUT) :: address ! If the link is a hard link, address specifies the file address that the link points to + INTEGER(HSIZE_T), INTENT(OUT) :: val_size ! If the link is a symbolic link, val_size will be the length of the link value + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! 0 on success and -1 on failure + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list + + INTEGER(SIZE_T) :: link_namelen + INTEGER(HID_T) :: lapl_id_default + INTEGER :: corder_valid + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5lget_info_c(link_loc_id, link_name, link_namelen, & + cset, corder, corder_valid, link_type, address, val_size, & + lapl_id_default) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5LGET_INFO_C'::h5lget_info_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: link_loc_id + CHARACTER(LEN=*), INTENT(IN) :: link_name + INTEGER, INTENT(OUT) :: cset + INTEGER, INTENT(OUT) :: corder + INTEGER, INTENT(OUT) :: link_type + INTEGER, INTENT(OUT) :: address + INTEGER(HSIZE_T), INTENT(OUT) :: val_size + INTEGER(HID_T) :: lapl_id_default + INTEGER(SIZE_T) :: link_namelen + INTEGER :: corder_valid + END FUNCTION h5lget_info_c + END INTERFACE + + link_namelen = LEN(link_name) + + lapl_id_default = H5P_DEFAULT_F + IF(PRESENT(lapl_id)) lapl_id_default = lapl_id + + hdferr = h5lget_info_c(link_loc_id, link_name, link_namelen, & + cset, corder, corder_valid, link_type, & + address, val_size, & + lapl_id_default) + + f_corder_valid =.FALSE. + IF(corder_valid .EQ. 1) f_corder_valid =.TRUE. + + END SUBROUTINE h5lget_info_f + +!---------------------------------------------------------------------- +! Name: h5lget_info_by_idx_f +! +! Purpose: Retrieves metadata for a link in a group, according to the order within a field or index. +! +! Inputs: +! loc_id - File or group identifier specifying location of subject group +! group_name - Name of subject group +! index_field - Index or field which determines the order +! order - Order within field or index +! n - Link for which to retrieve information +! +! Outputs: NOTE: In C these are defined as a structure: H5L_info_t +! corder_valid - indicates whether the creation order data is valid for this attribute +! corder - is a positive integer containing the creation order of the attribute +! cset - indicates the character set used for the attribute’s name +! data_size - indicates the size, in the number of characters, of the attribute +! hdferr - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! lapl_id - Link access property list +! +! Programmer: M.S. Breitenfeld +! February 29, 2008 +! +! Modifications: N/A +! +!---------------------------------------------------------------------- + SUBROUTINE h5lget_info_by_idx_f(loc_id, group_name, index_field, order, n, & + f_corder_valid, corder, cset, data_size, hdferr, lapl_id) +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5lget_info_by_idx_f +!DEC$endif + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id ! File or group identifier specifying location of subject group + CHARACTER(LEN=*), INTENT(IN) :: group_name ! Name of subject group + INTEGER, INTENT(IN) :: index_field ! Index or field which determines the order + ! H5_INDEX_UNKNOWN_F - Unknown index type + ! H5_INDEX_NAME_F - Index on names + ! H5_INDEX_CRT_ORDER_F - Index on creation order + ! H5_INDEX_N_F - Number of indices defined + INTEGER, INTENT(IN) :: order ! Order in which to iterate over index; Possible values are: + ! H5_ITER_UNKNOWN_F - Unknown order + ! H5_ITER_INC_F - Increasing order + ! H5_ITER_DEC_F - Decreasing order + ! H5_ITER_NATIVE_F - No particular order, whatever is fastest + INTEGER(HSIZE_T), INTENT(IN) :: n ! Attribute’s position in index + LOGICAL, INTENT(OUT) :: f_corder_valid ! Indicates whether the creation order data is valid for this attribute + INTEGER, INTENT(OUT) :: corder ! Is a positive integer containing the creation order of the attribute + INTEGER, INTENT(OUT) :: cset ! Indicates the character set used for the attribute’s name + INTEGER(HSIZE_T), INTENT(OUT) :: data_size ! Indicates the size, in the number of characters, of the attribute + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! 0 on success and -1 on failure + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list + INTEGER :: corder_valid + INTEGER(SIZE_T) :: group_namelen + INTEGER(HID_T) :: lapl_id_default + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5lget_info_by_idx_c(loc_id, group_name, group_namelen, index_field, order, n, & + corder_valid, corder, cset, data_size, lapl_id_default) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5LGET_INFO_BY_IDX_C'::h5lget_info_by_idx_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: loc_id + CHARACTER(LEN=*), INTENT(IN) :: group_name + INTEGER(SIZE_T) :: group_namelen + INTEGER, INTENT(IN) :: index_field + INTEGER, INTENT(IN) :: order + INTEGER(HSIZE_T), INTENT(IN) :: n + INTEGER :: corder_valid + INTEGER, INTENT(OUT) :: corder + INTEGER, INTENT(OUT) :: cset + INTEGER(HSIZE_T), INTENT(OUT) :: data_size + INTEGER(HID_T) :: lapl_id_default + END FUNCTION h5lget_info_by_idx_c + END INTERFACE + + group_namelen = LEN(group_name) + + lapl_id_default = H5P_DEFAULT_F + IF(PRESENT(lapl_id)) lapl_id_default = lapl_id + + hdferr = h5lget_info_by_idx_c(loc_id, group_name, group_namelen, index_field, order, n, & + corder_valid, corder, cset, data_size, lapl_id_default) + + f_corder_valid =.FALSE. + IF (corder_valid .EQ. 1) f_corder_valid =.TRUE. + + END SUBROUTINE h5lget_info_by_idx_f + +!---------------------------------------------------------------------- +! Name: H5Lis_registered_f +! +! Purpose: Determines whether a class of user-defined links is registered. +! +! Inputs: +! link_cls_id - User-defined link class identifier +! +! Outputs: +! registered - .TRUE. - if the link class has been registered +! .FALSE. - if it is unregistered +! hdferr - Error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! None +! +! Programmer: M.S. Breitenfeld +! February 29, 2008 +! +! Modifications: N/A +! +!---------------------------------------------------------------------- + SUBROUTINE H5Lis_registered_f(link_cls_id, registered, hdferr) +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: H5Lis_registered_f +!DEC$endif + IMPLICIT NONE + INTEGER, INTENT(IN) :: link_cls_id ! User-defined link class identifier + LOGICAL, INTENT(OUT) :: registered ! .TRUE. - if the link class has been registered and + ! .FALSE. - if it is unregistered + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! 0 on success and -1 on failure +! +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION H5Lis_registered_c(link_cls_id) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5LIS_REGISTERED_C'::h5lis_registered_c + !DEC$ ENDIF + INTEGER, INTENT(IN) :: link_cls_id ! User-defined link class identifier + END FUNCTION H5Lis_registered_c + END INTERFACE + + hdferr = H5Lis_registered_c(link_cls_id) + + IF(hdferr.GT.0)THEN + registered = .TRUE. + ELSE IF(hdferr.EQ.0)THEN + registered = .FALSE. + ENDIF + + END SUBROUTINE H5Lis_registered_f + +!---------------------------------------------------------------------- +! Name: H5Lmove_f +! +! Purpose: Renames a link within an HDF5 file. +! +! Inputs: +! src_loc_id - Original file or group identifier. +! src_name - Original link name. +! dest_loc_id - Destination file or group identifier. +! dest_name - NEW link name. +! +! Outputs: +! hdferr - Error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! lcpl_id - Link creation property list identifier to be associated WITH the NEW link. +! lapl_id - Link access property list identifier to be associated WITH the NEW link. +! +! Programmer: M.S. Breitenfeld +! March 3, 2008 +! +! Modifications: N/A +! +!---------------------------------------------------------------------- + SUBROUTINE h5lmove_f(src_loc_id, src_name, dest_loc_id, dest_name, hdferr, lcpl_id, lapl_id) +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: H5Lmove_f +!DEC$endif + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: src_loc_id ! Original file or group identifier. + CHARACTER(LEN=*), INTENT(IN) :: src_name ! Original link name. + INTEGER(HID_T), INTENT(IN) :: dest_loc_id ! Destination file or group identifier. + CHARACTER(LEN=*), INTENT(IN) :: dest_name ! NEW link name. + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! 0 on success and -1 on failure + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lcpl_id ! Link creation property list identifier + ! to be associated WITH the NEW link. + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list identifier + ! to be associated WITH the NEW link. + + INTEGER(SIZE_T) :: src_namelen + INTEGER(SIZE_T) :: dest_namelen + + INTEGER(HID_T) :: lcpl_id_default + INTEGER(HID_T) :: lapl_id_default + +! +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION H5Lmove_c(src_loc_id, src_name, src_namelen, dest_loc_id, & + dest_name, dest_namelen, lcpl_id_default, lapl_id_default) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5LMOVE_C'::h5lmove_c + !DEC$ ENDIF + + INTEGER(HID_T), INTENT(IN) :: src_loc_id + CHARACTER(LEN=*), INTENT(IN) :: src_name + INTEGER(SIZE_T) :: src_namelen + INTEGER(HID_T), INTENT(IN) :: dest_loc_id + CHARACTER(LEN=*), INTENT(IN) :: dest_name + INTEGER(SIZE_T) :: dest_namelen + + INTEGER(HID_T) :: lcpl_id_default + INTEGER(HID_T) :: lapl_id_default + + END FUNCTION H5Lmove_c + END INTERFACE + + lcpl_id_default = H5P_DEFAULT_F + IF(PRESENT(lcpl_id)) lcpl_id_default = lcpl_id + lapl_id_default = H5P_DEFAULT_F + IF(PRESENT(lapl_id)) lapl_id_default = lapl_id + + src_namelen = LEN(src_name) + dest_namelen = LEN(dest_name) + + hdferr = H5Lmove_c(src_loc_id, src_name, src_namelen, dest_loc_id, & + dest_name, dest_namelen, lcpl_id_default, lapl_id_default) + + END SUBROUTINE H5Lmove_f + +!---------------------------------------------------------------------- +! Name: h5lget_name_by_idx_f +! +! Purpose: Retrieves name of the nth link in a group, according to the order within a specified field or index. +! +! Inputs: +! loc_id - File or group identifier specifying location of subject group +! group_name - Name of subject group +! index_field - Index or field which determines the order +! order - Order within field or index +! n - Link for which to retrieve information +! +! Outputs: +! name - Buffer in which link value is returned +! size - Maximum number of characters of link value to be returned. +! hdferr - error code +! Success: 0 +! Failure: -1 +! +! Optional parameters: +! lapl_id - List access property list identifier. +! +! Programmer: M. S. Breitenfeld +! March 10, 2008 +! +! Modifications: N/A +! +!---------------------------------------------------------------------- + SUBROUTINE h5lget_name_by_idx_f(loc_id, group_name, index_field, order, n, & + size, name, hdferr, lapl_id) +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5lget_name_by_idx_f +!DEC$endif + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id ! File or group identifier specifying location of subject group + CHARACTER(LEN=*), INTENT(IN) :: group_name ! Name of subject group + INTEGER, INTENT(IN) :: index_field ! Index or field which determines the order + ! H5_INDEX_UNKNOWN_F - Unknown index type + ! H5_INDEX_NAME_F - Index on names + ! H5_INDEX_CRT_ORDER_F - Index on creation order + ! H5_INDEX_N_F - Number of indices defined + INTEGER, INTENT(IN) :: order ! Order in which to iterate over index; Possible values are: + ! H5_ITER_UNKNOWN_F - Unknown order + ! H5_ITER_INC_F - Increasing order + ! H5_ITER_DEC_F - Decreasing order + ! H5_ITER_NATIVE_F - No particular order, whatever is fastest + INTEGER(HSIZE_T), INTENT(IN) :: n ! Attribute’s position in index + INTEGER(SIZE_T), INTENT(INOUT) :: size ! Indicates the size, in the number of characters, of the attribute + ! returns correct size + CHARACTER(LEN=*), INTENT(OUT) :: name ! Buffer in which link value is returned + INTEGER, INTENT(OUT) :: hdferr ! Error code: + + INTEGER(SIZE_T) :: group_namelen + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list + INTEGER(HID_T) :: lapl_id_default + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5lget_name_by_idx_c(loc_id, group_name, group_namelen, index_field, order, n, & + size, name, lapl_id_default) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5LGET_NAME_BY_IDX_C'::h5lget_name_by_idx_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: loc_id + CHARACTER(LEN=*), INTENT(IN) :: group_name + INTEGER(SIZE_T) :: group_namelen + INTEGER, INTENT(IN) :: index_field + INTEGER, INTENT(IN) :: order + INTEGER(HSIZE_T), INTENT(IN) :: n + INTEGER(SIZE_T), INTENT(INOUT) :: size + CHARACTER(LEN=*), INTENT(OUT) :: name + INTEGER(HID_T) :: lapl_id_default + END FUNCTION h5lget_name_by_idx_c + END INTERFACE + + group_namelen = LEN(group_name) + + lapl_id_default = H5P_DEFAULT_F + IF(PRESENT(lapl_id)) lapl_id_default = lapl_id + + hdferr = h5lget_name_by_idx_c(loc_id, group_name, group_namelen, index_field, order, n, & + size, name, lapl_id_default) + + END SUBROUTINE h5lget_name_by_idx_f + + +! HAS PROBLEM WITH void pointer in C + +!!$!---------------------------------------------------------------------- +!!$! Name: h5lget_val_by_idx_f +!!$! +!!$! Purpose: Returns the link value of a link, according to the order of +!!$! an index. For symbolic links, this is the path to which the +!!$! link points, including the null terminator. For user-defined +!!$! links, it is the link buffer. +!!$! Inputs: +!!$! loc_id - File or group identifier specifying location of subject group +!!$! group_name - Name of subject group +!!$! index_field - Index or field which determines the order +!!$! order - Order within field or index +!!$! n - Link for which to retrieve information +!!$! size - Maximum number of characters of link value to be returned. +!!$! +!!$! Outputs: NOTE: In C these are defined as a structure: H5L_info_t +!!$! corder_valid - indicates whether the creation order data is valid for this attribute +!!$! corder - is a positive integer containing the creation order of the attribute +!!$! cset - indicates the character set used for the attribute’s name +!!$! data_size - indicates the size, in the number of characters, of the attribute +!!$! hdferr - error code +!!$! Success: 0 +!!$! Failure: -1 +!!$! Optional parameters: +!!$! lapl_id - List access property list identifier. +!!$! +!!$! Programmer: M. S. Breitenfeld +!!$! March 3, 2008 +!!$! +!!$! Modifications: N/A +!!$! +!!$!---------------------------------------------------------------------- +!!$ SUBROUTINE h5lget_val_by_idx_f(loc_id, group_name, index_field, order, n, & +!!$ f_corder_valid, corder, cset, data_size, hdferr, lapl_id) +!!$!This definition is needed for Windows DLLs +!!$!DEC$if defined(BUILD_HDF5_DLL) +!!$!DEC$attributes dllexport :: h5lget_val_by_idx_f +!!$!DEC$endif +!!$ IMPLICIT NONE +!!$ INTEGER(HID_T), INTENT(IN) :: loc_id ! File or group identifier specifying location of subject group +!!$ CHARACTER(LEN=*), INTENT(IN) :: group_name ! Name of subject group +!!$ INTEGER, INTENT(IN) :: index_field ! Index or field which determines the order +!!$ ! H5_INDEX_UNKNOWN_F - Unknown index type +!!$ ! H5_INDEX_NAME_F - Index on names +!!$ ! H5_INDEX_CRT_ORDER_F - Index on creation order +!!$ ! H5_INDEX_N_F - Number of indices defined +!!$ INTEGER, INTENT(IN) :: order ! Order in which to iterate over index; Possible values are: +!!$ ! H5_ITER_UNKNOWN_F - Unknown order +!!$ ! H5_ITER_INC_F - Increasing order +!!$ ! H5_ITER_DEC_F - Decreasing order +!!$ ! H5_ITER_NATIVE_F - No particular order, whatever is fastest +!!$ INTEGER(HSIZE_T), INTENT(IN) :: n ! Attribute’s position in index +!!$ LOGICAL, INTENT(OUT) :: f_corder_valid ! Indicates whether the creation order data is valid for this attribute +!!$ INTEGER, INTENT(OUT) :: corder ! Is a positive integer containing the creation order of the attribute +!!$ INTEGER, INTENT(OUT) :: cset ! Indicates the character set used for the attribute’s name +!!$ INTEGER(HSIZE_T), INTENT(OUT) :: data_size ! Indicates the size, in the number of characters, of the attribute +!!$ INTEGER, INTENT(OUT) :: hdferr ! Error code: +!!$ ! 0 on success and -1 on failure +!!$ INTEGER :: corder_valid +!!$ INTEGER(SIZE_T) :: group_namelen +!!$ INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list +!!$ INTEGER(HID_T) :: lapl_id_default +!!$ +!!$! MS FORTRAN needs explicit interface for C functions called here. +!!$! +!!$ INTERFACE +!!$ INTEGER FUNCTION h5lget_val_by_idx_c(loc_id, group_name, group_namelen, index_field, order, n, & +!!$ corder_valid, corder, cset, data_size, lapl_id_default) +!!$ USE H5GLOBAL +!!$ !DEC$ IF DEFINED(HDF5F90_WINDOWS) +!!$ !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5LGET_VAL_BY_IDX_C'::h5lget_val_by_idx_c +!!$ !DEC$ ENDIF +!!$ INTEGER(HID_T), INTENT(IN) :: loc_id +!!$ CHARACTER(LEN=*), INTENT(IN) :: group_name +!!$ INTEGER(SIZE_T) :: group_namelen +!!$ INTEGER, INTENT(IN) :: index_field +!!$ INTEGER, INTENT(IN) :: order +!!$ INTEGER(HSIZE_T), INTENT(IN) :: n +!!$ INTEGER :: corder_valid +!!$ INTEGER, INTENT(OUT) :: corder +!!$ INTEGER, INTENT(OUT) :: cset +!!$ INTEGER(HSIZE_T), INTENT(OUT) :: data_size +!!$ INTEGER(HID_T) :: lapl_id_default +!!$ END FUNCTION h5lget_val_by_idx_c +!!$ END INTERFACE +!!$ +!!$ group_namelen = LEN(group_name) +!!$ +!!$ lapl_id_default = H5P_DEFAULT_F +!!$ IF(PRESENT(lapl_id)) lapl_id_default = lapl_id +!!$ +!!$ hdferr = h5lget_info_by_idx_c(loc_id, group_name, group_namelen, index_field, order, n, & +!!$ corder_valid, corder, cset, data_size, lapl_id_default) +!!$ +!!$ f_corder_valid =.FALSE. +!!$ IF (corder_valid .EQ. 1) f_corder_valid =.TRUE. +!!$ +!!$ END SUBROUTINE h5lget_val_by_idx_f + + + +!---------------------------------------------------------------------- +! Name: h5lget_val_f +! +! Purpose: Returns the value of a symbolic link. +! +! Inputs: +! link_loc_id - File or group identifier. +! link_name - Link whose value is to be returned. +! size - Maximum number of characters of link value to be returned. +! +! Outputs: +! linkval_buff - The buffer to hold the returned link value. +! hdferr - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! lapl_id - List access property list identifier. +! +! Programmer: M. S. Breitenfeld +! March 3, 2008 +! +! Modifications: N/A +! +!---------------------------------------------------------------------- + +!!$ SUBROUTINE h5lget_val_f(link_loc_id, link_name, size, linkval_buff, & +!!$ hdferr, lapl_id) +!!$!This definition is needed for Windows DLLs +!!$!DEC$if defined(BUILD_HDF5_DLL) +!!$!DEC$attributes dllexport :: h5lget_val_f +!!$!DEC$endif +!!$ IMPLICIT NONE +!!$ INTEGER(HID_T), INTENT(IN) :: link_loc_id ! File or group identifier. +!!$ CHARACTER(LEN=*), INTENT(IN) :: link_name ! Link whose value is to be returned. +!!$ INTEGER(SIZE_T), INTENT(IN) :: size ! Maximum number of characters of link value to be returned. +!!$ +!!$ CHARACTER(LEN=size), INTENT(OUT) :: linkval_buff ! The buffer to hold the returned link value. +!!$ INTEGER, INTENT(OUT) :: hdferr ! Error code: +!!$ ! 0 on success and -1 on failure +!!$ INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list +!!$ +!!$ INTEGER :: link_namelen +!!$ INTEGER(HID_T) :: lapl_id_default +!!$ INTEGER :: corder_valid +!!$ +!!$ INTEGER :: link_namelen +!!$ INTEGER(HID_T) :: lapl_id_default +!!$ +!!$! MS FORTRAN needs explicit interface for C functions called here. +!!$! +!!$ INTERFACE +!!$ INTEGER FUNCTION h5lget_val_c(link_loc_id, link_name, link_namelen, size, linkval_buff, & +!!$ lapl_id_default) +!!$ USE H5GLOBAL +!!$ !DEC$ IF DEFINED(HDF5F90_WINDOWS) +!!$ !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5LGET_VAL_C'::h5lget_val_c +!!$ !DEC$ ENDIF +!!$ INTEGER(HID_T), INTENT(IN) :: link_loc_id ! File or group identifier. +!!$ CHARACTER(LEN=*), INTENT(IN) :: link_name ! Link whose value is to be returned. +!!$ INTEGER :: link_namelen +!!$ INTEGER(SIZE_T), INTENT(IN) :: size ! Maximum number of characters of link value to be returned. +!!$ +!!$ CHARACTER(LEN=size), INTENT(OUT) :: linkval_buff ! The buffer to hold the returned link value. +!!$ +!!$ INTEGER :: link_namelen +!!$ INTEGER(HID_T) :: lapl_id_default +!!$ +!!$ END FUNCTION h5lget_val_c +!!$ END INTERFACE +!!$ +!!$ link_namelen = LEN(link_name) +!!$ +!!$ lapl_id_default = H5P_DEFAULT_F +!!$ IF(PRESENT(lapl_id)) lapl_id_default = lapl_id +!!$ +!!$ hdferr = h5lget_val_c(link_loc_id, link_name, link_namelen, size, linkval_buff, & +!!$ lapl_id_default) +!!$ +!!$ END SUBROUTINE h5lget_val_f + + + +!---------------------------------------------------------------------- +! Name: H5Lregistered_f +! +! Purpose: Registers user-defined link class or changes behavior of existing class. +! +! Inputs: NOTE: In C the following represents struct H5L_class_t: +! version - Version number of this struct +! class_id - Link class identifier +! comment - Comment for debugging +! create_func - Callback during link creation +! move_func - Callback after moving link +! copy_func - Callback after copying link +! trav_func - The main traversal function +! del_func - Callback for link deletion +! query_func - Callback for queries +! +! Outputs: +! hdferr - Error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! None +! +! Programmer: M.S. Breitenfeld +! February 29, 2008 +! +! Modifications: N/A +! +!---------------------------------------------------------------------- +!!$ SUBROUTINE H5Lregistered_f(version, class_id, comment, create_func, & +!!$ move_func, copy_func, trav_func, del_func, query_func, hdferr) +!!$!This definition is needed for Windows DLLs +!!$!DEC$if defined(BUILD_HDF5_DLL) +!!$!DEC$attributes dllexport :: H5Lregistered_f +!!$!DEC$endif +!!$ IMPLICIT NONE +!!$ INTEGER, INTENT(IN) :: version ! Version number of this struct +!!$ INTEGER, INTENT(IN) :: class_id ! Link class identifier +!!$ CHARACTER(LEN=*), INTENT(IN) :: comment ! Comment for debugging +!!$ CHARACTER(LEN=*), INTENT(IN) :: create_func ! Callback during link creation +!!$ CHARACTER(LEN=*), INTENT(IN) :: move_func ! Callback after moving link +!!$ CHARACTER(LEN=*), INTENT(IN) :: copy_func ! Callback after copying link +!!$ CHARACTER(LEN=*), INTENT(IN) :: trav_func ! The main traversal function +!!$ CHARACTER(LEN=*), INTENT(IN) :: del_func ! Callback for link deletion +!!$ CHARACTER(LEN=*), INTENT(IN) :: query_func ! Callback for queries +!!$ INTEGER, INTENT(OUT) :: hdferr ! Error code: +!!$ ! 0 on success and -1 on failure +!!$ INTEGER :: comment_len +!!$ INTEGER :: create_func_len +!!$ INTEGER :: move_func_len +!!$ INTEGER :: copy_func_len +!!$ INTEGER :: trav_func_len +!!$ INTEGER :: del_func_len +!!$ INTEGER :: query_func_len +!!$ +!!$! +!!$! MS FORTRAN needs explicit interface for C functions called here. +!!$! +!!$ INTERFACE +!!$ INTEGER FUNCTION H5Lregistered_c(version, class_id, comment, & +!!$ create_func, create_func_len, & +!!$ move_func, move_func_len, & +!!$ copy_func, copy_func_len, & +!!$ trav_func, trav_func_len, & +!!$ del_func, del_func_len, & +!!$ query_func,query_func_len) +!!$ USE H5GLOBAL +!!$ !DEC$ IF DEFINED(HDF5F90_WINDOWS) +!!$ !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5LREGISTERED_C'::H5Lregistered_c +!!$ !DEC$ ENDIF +!!$ INTEGER, INTENT(IN) :: version ! Version number of this struct +!!$ INTEGER, INTENT(IN) :: class_id ! Link class identifier +!!$ CHARACTER(LEN=*), INTENT(IN) :: comment ! Comment for debugging +!!$ CHARACTER(LEN=*), INTENT(IN) :: create_func ! Callback during link creation +!!$ CHARACTER(LEN=*), INTENT(IN) :: move_func ! Callback after moving link +!!$ CHARACTER(LEN=*), INTENT(IN) :: copy_func ! Callback after copying link +!!$ CHARACTER(LEN=*), INTENT(IN) :: trav_func ! The main traversal function +!!$ CHARACTER(LEN=*), INTENT(IN) :: del_func ! Callback for link deletion +!!$ CHARACTER(LEN=*), INTENT(IN) :: query_func ! Callback for queries +!!$ INTEGER, INTENT(OUT) :: hdferr ! Error code: +!!$ ! 0 on success and -1 on failure +!!$ INTEGER :: comment_len +!!$ INTEGER :: create_func_len +!!$ INTEGER :: move_func_len +!!$ INTEGER :: copy_func_len +!!$ INTEGER :: trav_func_len +!!$ INTEGER :: del_func_len +!!$ INTEGER :: query_func_len +!!$ +!!$ END FUNCTION H5Lregistered_c +!!$ END INTERFACE +!!$ +!!$ comment_len = LEN(comment) +!!$ create_func_len = LEN(create_func) +!!$ move_func_len = LEN(move_func) +!!$ copy_func_len = LEN(copy_func) +!!$ trav_func_len = LEN(trav_func) +!!$ del_func_len = LEN(del_func) +!!$ query_func_len = LEN(query_func) +!!$ +!!$ hdferr = H5Lregistered_c(version, class_id, comment, & +!!$ create_func, create_func_len, & +!!$ move_func, move_func_len, & +!!$ copy_func, copy_func_len, & +!!$ trav_func, trav_func_len, & +!!$ del_func, del_func_len, & +!!$ query_func, query_func_len) +!!$ +!!$ END SUBROUTINE H5Lregistered_f + +END MODULE H5L diff --git a/fortran/src/H5Of.c b/fortran/src/H5Of.c new file mode 100644 index 0000000..9a708da --- /dev/null +++ b/fortran/src/H5Of.c @@ -0,0 +1,99 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Copyright by The HDF Group. * + * Copyright by the Board of Trustees of the University of Illinois. * + * All rights reserved. * + * * + * This file is part of HDF5. The full HDF5 copyright notice, including * + * terms governing use, modification, and redistribution, is contained in * + * the files COPYING and Copyright.html. COPYING can be found at the root * + * of the source code distribution tree; Copyright.html can be found at the * + * root level of an installed copy of the electronic HDF5 document set and * + * is linked from the top-level documents page. It can also be found at * + * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have * + * access to either file, you may request a copy from help@hdfgroup.org. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/* This files contains C stubs for H5O Fortran APIs */ + +#include "H5f90.h" +#include "H5Eprivate.h" + +/*---------------------------------------------------------------------------- + * Name: h5olink_c + * Purpose: Calls H5Olink + * Inputs: + * object_id - Object to be linked. + * new_loc_id - File or group identifier specifying location at which object is to be linked. + * name - Name of link to be created, relative to new_loc_id. + * namelen - Length of buffer for link to be created. + * lcpl_id - Link creation property list identifier. + * lapl_id - Link access property list identifier. + * Outputs: + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * April 21, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5olink_c (hid_t_f *object_id, hid_t_f *new_loc_id, _fcd name, size_t_f *namelen, + hid_t_f *lcpl_id, hid_t_f *lapl_id) +{ + char *c_name = NULL; /* Buffer to hold C string */ + int_f ret_value = 0; /* Return value */ + + /* + * Convert FORTRAN name to C name + */ + if( (c_name = HD5f2cstring(name, (size_t)*namelen)) == NULL) + HGOTO_DONE(FAIL); + + /* + * Call H5Olink function. + */ + if((hid_t_f)H5Olink((hid_t)*object_id, (hid_t)*new_loc_id, c_name, + (hid_t)*lcpl_id, (hid_t)*lapl_id) < 0) + HGOTO_DONE(FAIL); + + done: + if(c_name) + HDfree(c_name); + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5oopen_c + * Purpose: Calls H5Oopen + * Inputs: loc_id - File or group identifier + * name - Attribute access property list + * namelen - Size of name + * lapl_id - Link access property list + * Outputs: obj_id - Dataset identifier + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * April 18, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5oopen_c (hid_t_f *loc_id, _fcd name, size_t_f *namelen, hid_t_f *lapl_id, hid_t_f *obj_id) +{ + char *c_name = NULL; /* Buffer to hold C string */ + int_f ret_value = 0; /* Return value */ + + /* + * Convert FORTRAN name to C name + */ + if((c_name = HD5f2cstring(name, (size_t)*namelen)) == NULL) + HGOTO_DONE(FAIL); + + /* + * Call H5Oopen function. + */ + if((*obj_id = (hid_t_f)H5Oopen((hid_t)*loc_id, c_name, (hid_t)*lapl_id)) < 0) + HGOTO_DONE(FAIL); + + done: + if(c_name) + HDfree(c_name); + return ret_value; +} + diff --git a/fortran/src/H5Off.f90 b/fortran/src/H5Off.f90 new file mode 100644 index 0000000..c64b82d --- /dev/null +++ b/fortran/src/H5Off.f90 @@ -0,0 +1,163 @@ +! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +! Copyright by The HDF Group. * +! Copyright by the Board of Trustees of the University of Illinois. * +! All rights reserved. * +! * +! This file is part of HDF5. The full HDF5 copyright notice, including * +! terms governing use, modification, and redistribution, is contained in * +! the files COPYING and Copyright.html. COPYING can be found at the root * +! of the source code distribution tree; Copyright.html can be found at the * +! root level of an installed copy of the electronic HDF5 document set and * +! is linked from the top-level documents page. It can also be found at * +! http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have * +! access to either file, you may request a copy from help@hdfgroup.org. * +! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +! +! +! This file contains Fortran90 interfaces for H5O functions. +! +MODULE H5O + + USE H5GLOBAL + +CONTAINS + +!---------------------------------------------------------------------- +! Name: h5olink_f +! +! Purpose: Creates a hard link to an object in an HDF5 file. +! +! Inputs: +! object_id - Object to be linked. +! new_loc_id - File or group identifier specifying location at which object is to be linked. +! new_link_name - Name of link to be created, relative to new_loc_id. +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! lcpl_id - Link creation property list identifier. +! lapl_id - Link access property list identifier. +! +! Programmer: M.S. Breitenfeld +! April 21, 2008 +! +! Modifications: N/A +! +!---------------------------------------------------------------------- + + SUBROUTINE h5olink_f(object_id, new_loc_id, new_link_name, hdferr, lcpl_id, lapl_id) +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5olink_f +!DEC$endif + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: object_id ! Object to be linked + INTEGER(HID_T), INTENT(IN) :: new_loc_id ! File or group identifier specifying + ! location at which object is to be linked. + CHARACTER(LEN=*), INTENT(IN) :: new_link_name ! Name of link to be created, relative to new_loc_id. + INTEGER, INTENT(OUT) :: hdferr ! Error code + ! Success: 0 + ! Failure: -1 + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lcpl_id ! Link creation property list identifier. + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link creation property list identifier. + INTEGER(HID_T) :: lapl_id_default + INTEGER(HID_T) :: lcpl_id_default + + INTEGER(SIZE_T) :: new_link_namelen + + INTERFACE + INTEGER FUNCTION h5olink_c(object_id, new_loc_id, new_link_name, new_link_namelen, & + lcpl_id_default, lapl_id_default) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5OLINK_C'::h5olink_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: object_id + INTEGER(HID_T), INTENT(IN) :: new_loc_id + CHARACTER(LEN=*), INTENT(IN) :: new_link_name + INTEGER(SIZE_T) :: new_link_namelen + INTEGER(HID_T) :: lapl_id_default + INTEGER(HID_T) :: lcpl_id_default + END FUNCTION h5olink_c + END INTERFACE + + new_link_namelen = LEN(new_link_name) + + lapl_id_default = H5P_DEFAULT_F + IF(PRESENT(lapl_id)) lapl_id_default = lapl_id + lcpl_id_default = H5P_DEFAULT_F + IF(PRESENT(lcpl_id)) lcpl_id_default = lcpl_id + + hdferr = h5olink_c(object_id, new_loc_id, new_link_name, new_link_namelen, & + lcpl_id_default, lapl_id_default) + + END SUBROUTINE h5olink_f + +!---------------------------------------------------------------------- +! Name: h5oopen_f +! +! Purpose: Opens an object in an HDF5 file by location identifier and path name.O +! +! Inputs: +! loc_id - File or group identifier +! name - Path to the object, relative to loc_id. +! Outputs: +! obj_id - Object identifier for the opened object +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! lapl_id - Access property list identifier for the link pointing to the object +! +! Programmer: M.S. Breitenfeld +! April 18, 2008 +! +! Modifications: N/A +! +!---------------------------------------------------------------------- + + SUBROUTINE h5oopen_f(loc_id, name, obj_id, hdferr, lapl_id) +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5oopen_f +!DEC$endif + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id ! File or group identifier + CHARACTER(LEN=*), INTENT(IN) :: name ! Path to the object, relative to loc_id + INTEGER(HID_T), INTENT(OUT) :: obj_id ! Object identifier for the opened object + INTEGER, INTENT(OUT) :: hdferr ! Error code + ! Success: 0 + ! Failure: -1 + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Attribute access property list + INTEGER(HID_T) :: lapl_id_default + + INTEGER(SIZE_T) :: namelen + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5oopen_c(loc_id, name, namelen, lapl_id_default, obj_id) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5OOPEN_C'::h5oopen_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: loc_id + CHARACTER(LEN=*), INTENT(IN) :: name + INTEGER(HID_T) :: lapl_id_default + INTEGER(SIZE_T) :: namelen + INTEGER(HID_T), INTENT(OUT) :: obj_id + END FUNCTION h5oopen_c + END INTERFACE + + namelen = LEN(name) + + lapl_id_default = H5P_DEFAULT_F + IF(PRESENT(lapl_id)) lapl_id_default = lapl_id + + hdferr = h5oopen_c(loc_id, name, namelen, lapl_id_default, obj_id) + + END SUBROUTINE h5oopen_f + + +END MODULE H5O diff --git a/fortran/src/H5Pf.c b/fortran/src/H5Pf.c index f674530..ea7a4bb 100644 --- a/fortran/src/H5Pf.c +++ b/fortran/src/H5Pf.c @@ -1,3 +1,4 @@ + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * @@ -17,7 +18,6 @@ #include "H5f90.h" - /*---------------------------------------------------------------------------- * Name: h5pcreate_c * Purpose: Call H5Pcreate to create a property list @@ -2710,16 +2710,20 @@ int_f nh5pget_class_name_c(hid_t_f *class, _fcd name, int_f *name_len) { int_f ret_value = -1; - hid_t c_class; - char* c_name; - + char *c_name = NULL; /* Buffer to hold C string */ + size_t c_size; - c_class = (hid_t)*class; + c_size = (size_t)*name_len + 1; + /* + * Allocate buffer to hold name + */ + if ((c_name = HDmalloc(c_size)) == NULL) + goto DONE; /* * Call H5Pget_class_name function. */ - c_name = H5Pget_class_name(c_class); - if( c_name == NULL) goto DONE; + c_name = H5Pget_class_name((hid_t)*class); + if(c_name == NULL) goto DONE; HD5packFstring(c_name, _fcdtocp(name), (size_t)*name_len); ret_value = (int_f)HDstrlen(c_name); @@ -3131,7 +3135,7 @@ nh5pset_fapl_multi_sc ( hid_t_f *prp_id , int_f *flag) */ status = H5Pset_fapl_multi(c_prp_id, NULL, NULL, NULL, NULL, relax); - if ( status < 0 ) return ret_value; + if ( status < 0 ) return ret_value; /* error occurred */ ret_value = 0; return ret_value; } @@ -3414,3 +3418,1017 @@ DONE: return ret_value; } +/*---------------------------------------------------------------------------- + * Name: h5pget_attr_phase_change_c + * Purpose: Calls H5Pget_attr_phase_change + * + * Inputs: ocpl_id - Object (dataset or group) creation property list identifier + * Outputs max_compact - Maximum number of attributes to be stored in compact storage + * min_dense - Minimum number of attributes to be stored in dense storage + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * January, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5pget_attr_phase_change_c(hid_t_f *ocpl_id, int_f *max_compact, int_f *min_dense ) +{ + int ret_value = -1; + hid_t c_ocpl_id; + unsigned c_max_compact; + unsigned c_min_dense; + herr_t ret; + /* + * Call H5Pget_attr_phase_change function. + */ + c_ocpl_id = (hid_t)*ocpl_id; + ret = H5Pget_attr_phase_change(c_ocpl_id, &c_max_compact,&c_min_dense); + if (ret < 0) return ret_value; + + *max_compact = (int_f)c_max_compact; + *min_dense = (int_f)c_min_dense; + ret_value = 0; + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5pset_attr_creation_order_c + * Purpose: Calls H5Ppset_attr_creation_order + * + * Inputs: ocpl_id - Object (dataset or group) creation property list identifier + * Outputs crt_order_flags - Flags specifying whether to track and index attribute creation order + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * January, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5pset_attr_creation_order_c(hid_t_f *ocpl_id, int_f *crt_order_flags ) +{ + int ret_value = -1; + unsigned c_crt_order_flags; + herr_t ret; + /* + * Call h5pset_attr_creation_order function. + */ + c_crt_order_flags = (unsigned)*crt_order_flags; + ret = H5Pset_attr_creation_order((hid_t)*ocpl_id, c_crt_order_flags); + if (ret < 0) return ret_value; + + *crt_order_flags = (int_f)c_crt_order_flags; + ret_value = 0; + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5pset_shared_mesg_nindexes_c + * Purpose: Calls h5pset_shared_mesg_nindexes + * + * Inputs: + * plist_id - file creation property list + * nindexes - Number of shared object header message indexes + * available in files created WITH this property list + * + * Outputs: + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * January, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5pset_shared_mesg_nindexes_c(hid_t_f *plist_id, int_f *nindexes ) +{ + int ret_value = -1; + hid_t c_plist_id; + unsigned c_nindexes; + herr_t ret; + /* + * Call h5pset_shared_mesg_nindexes function. + */ + c_plist_id = (hid_t)*plist_id; + c_nindexes = (unsigned)*nindexes; + ret = H5Pset_shared_mesg_nindexes(c_plist_id, c_nindexes ); + if (ret < 0) return ret_value; + + ret_value = 0; + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5pset_shared_mesg_index_c + * Purpose: Calls H5Pset_shared_mesg_index + * + * Inputs: + * fcpl_id - File creation property list identifier. + * index_num - Index being configured. + * mesg_type_flags - Types of messages that should be stored in this index. + * min_mesg_size - Minimum message size. + * + * Outputs: + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * January, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5pset_shared_mesg_index_c(hid_t_f *fcpl_id, int_f *index_num, int_f *mesg_type_flags, int_f *min_mesg_size) +{ + int ret_value = -1; + herr_t ret; + /* + * Call h5pset_shared_mesg_index function. + */ + ret = H5Pset_shared_mesg_index((hid_t)*fcpl_id,(unsigned)*index_num, (unsigned)*mesg_type_flags, (unsigned)*min_mesg_size); + if (ret < 0) return ret_value; + + ret_value = 0; + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5pget_attr_creation_order_c + * Purpose: Calls H5Pget_attr_creation_order + * + * Inputs: + * ocpl_id - Object (group or dataset) creation property list identifier + * Outputs: + * crt_order_flags - Flags specifying whether to track and index attribute creation order + * + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * February, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5pget_attr_creation_order_c(hid_t_f *ocpl_id, int_f *crt_order_flags) +{ + int ret_value = -1; + herr_t ret; + + unsigned c_crt_order_flags; + /* + * Call h5pget_attr_creation_order function. + */ + + ret = H5Pget_attr_creation_order((hid_t)*ocpl_id, &c_crt_order_flags); + if (ret < 0) return ret_value; + + *crt_order_flags = (int_f)c_crt_order_flags; + + ret_value = 0; + return ret_value; +} +/*---------------------------------------------------------------------------- + * Name: h5pset_libver_bounds_c + * Purpose: Calls H5Pset_libver_bounds + * + * Inputs: + * fapl_id - File access property list identifier + * low - The earliest version of the library that will be used for writing objects. + * high - The latest version of the library that will be used for writing objects. + * Outputs: + * + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * February 18, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5pset_libver_bounds_c(hid_t_f *fapl_id, int_f *low, int_f *high ) +{ + int ret_value = -1; + herr_t ret; + + /* + * Call H5Pset_libver_bounds function. + */ + ret = H5Pset_libver_bounds( (hid_t)*fapl_id, (H5F_libver_t)*low, (H5F_libver_t)*high ); + if (ret < 0) return ret_value; + + ret_value = 0; + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5pset_link_creation_order_c + * Purpose: Calls H5Pset_link_creation_order + * + * Inputs: gcpl_id - Group creation property list identifier + * crt_order_flags - Creation order flag(s) + * Outputs: + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * February 18, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5pset_link_creation_order_c(hid_t_f *gcpl_id, int_f *crt_order_flags ) +{ + int ret_value = -1; + herr_t ret; + /* + * Call H5Pset_link_creation_order function. + */ + ret = H5Pset_link_creation_order((hid_t)*gcpl_id, (unsigned)*crt_order_flags); + if (ret < 0) return ret_value; + + ret_value = 0; + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5pget_link_phase_change_c + * Purpose: Calls H5Pget_link_phase_change + * + * Inputs: gcpl_id - Group creation property list identifier + * Outputs max_compact - Maximum number of attributes to be stored in compact storage + * min_dense - Minimum number of attributes to be stored in dense storage + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * February 20, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5pget_link_phase_change_c(hid_t_f *gcpl_id, int_f *max_compact, int_f *min_dense ) +{ + int ret_value = -1; + unsigned c_max_compact; + unsigned c_min_dense; + herr_t ret; + + /* + * Call H5Pget_link_phase_change function. + */ + ret = H5Pget_link_phase_change((hid_t)*gcpl_id, &c_max_compact,&c_min_dense); + if (ret < 0) return ret_value; + + *max_compact = (int_f)c_max_compact; + *min_dense = (int_f)c_min_dense; + ret_value = 0; + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5pget_obj_track_times_c + * Purpose: Call H5Pget_obj_track_times + * + * Inputs: plist_id - property list id + * Outputs: + * flag - TRUE/FALSE flag + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * February 22, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ + +int_f +nh5pget_obj_track_times_c(hid_t_f *plist_id, int_f *flag) +{ + int ret_value = -1; + hbool_t c_track_times=0; + herr_t ret; + + /* + * Call H5Pget_obj_track_times function. + */ + ret = H5Pget_obj_track_times((hid_t)*plist_id, &c_track_times); + + if (ret < 0) return ret_value; /* error occurred */ + + *flag = 0; + if(c_track_times > 0) *flag = 1; + ret_value = 0; + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5pset_obj_track_times_c + * Purpose: Call H5Pset_obj_track_times + * + * Inputs: plist_id - property list id + * flag - TRUE/FALSE flag + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * February 22, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ + +int_f +nh5pset_obj_track_times_c(hid_t_f *plist_id, int_f *flag) +{ + int ret_value = -1; + hbool_t c_track_times; + herr_t ret; + + + c_track_times = (hbool_t)*flag; + + /* + * Call H5Pset_obj_track_times function. + */ + ret = H5Pset_obj_track_times((hid_t)*plist_id, c_track_times); + + if (ret < 0) return ret_value; /* error occurred */ + ret_value = 0; + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5pset_create_inter_group_c + * Purpose: Calls H5Pset_create_intermediate_group + * + * Inputs: + * lcpl_id - Link creation property list identifier + * crt_intermed_group - crt_intermed_group specifying whether + * to create intermediate groups upon the + * creation of an object + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * February 22, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ + +int_f +nh5pset_create_inter_group_c(hid_t_f *lcpl_id, int_f *crt_intermed_group) +{ + int ret_value = -1; + herr_t ret; + + /* + * Call H5Pset_create_intermediate_group function. + */ + ret = H5Pset_create_intermediate_group((hid_t)*lcpl_id, (unsigned)*crt_intermed_group); + + if (ret < 0) return ret_value; /* error occurred */ + ret_value = 0; + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5pget_link_creation_order_c + * Purpose: Calls H5Pget_link_creation_order + * + * Inputs: + * gcpl_id - Group creation property list identifier + * Outputs: + * crt_order_flags - Creation order flag(s) + * + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * March 3, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5pget_link_creation_order_c(hid_t_f *gcpl_id, int_f *crt_order_flags) +{ + int ret_value = -1; + herr_t ret; + + unsigned c_crt_order_flags; + /* + * Call h5pget_link_creation_order function. + */ + + ret = H5Pget_link_creation_order((hid_t)*gcpl_id, &c_crt_order_flags); + if (ret < 0) return ret_value; + + *crt_order_flags = (int_f)c_crt_order_flags; + + ret_value = 0; + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5pset_char_encoding_c + * Purpose: Calls H5Pset_char_encoding + * + * Inputs: + * plist_id - Property list identifier + * encoding - String encoding character set: + * H5T_CSET_ASCII_F -> US ASCII + * H5T_CSET_UTF8_F -> UTF-8 Unicode encoding + * Outputs: NONE + * + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * March 3, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5pset_char_encoding_c(hid_t_f *plist_id, int_f *encoding) +{ + int ret_value = -1; + herr_t ret; + + /* + * Call H5Pset_char_encoding function. + */ + ret = H5Pset_char_encoding((hid_t)*plist_id, (H5T_cset_t)*encoding); + if (ret < 0) return ret_value; + + ret_value = 0; + return ret_value; +} + + +/*---------------------------------------------------------------------------- + * Name: h5pget_char_encoding_c + * Purpose: Calls H5Pget_char_encoding + * + * Inputs: + * plist_id - Property list identifier + * Outputs: + * encoding - Encoding character set: + * H5T_CSET_ASCII_F -> US ASCII + * H5T_CSET_UTF8_F -> UTF-8 Unicode encoding + * + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * March 3, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5pget_char_encoding_c(hid_t_f *plist_id, int_f *encoding) +{ + int ret_value = -1; + H5T_cset_t c_encoding; + herr_t ret; + /* + * Call H5Pget_char_encoding function. + */ + ret = H5Pget_char_encoding((hid_t)*plist_id, &c_encoding); + if (ret < 0) return ret_value; + + *encoding = (int_f)c_encoding; + + ret_value = 0; + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5pset_copy_object_c + * Purpose: Calls H5Pset_copy_object + * + * Inputs: + * ocp_plist_id - Object copy property list identifier + * copy_options - Copy option(s) to be set + * + * Outputs: + * NONE + * + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * March 3, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5pset_copy_object_c(hid_t_f *ocp_plist_id, int_f *copy_options) +{ + int ret_value = -1; + herr_t ret; + /* + * Call H5Pset_copy_object function. + */ + ret = H5Pset_copy_object((hid_t)*ocp_plist_id, (unsigned)*copy_options); + if (ret < 0) return ret_value; + + ret_value = 0; + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5pget_copy_object_c + * Purpose: Calls H5Pget_copy_object + * + * Inputs: + * ocp_plist_id - Object copy property list identifier + * + * Outputs: + * copy_options - Copy option(s) to be get + * + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * March 3, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5pget_copy_object_c(hid_t_f *ocp_plist_id, int_f *copy_options) +{ + int ret_value = -1; + unsigned c_copy_options; + herr_t ret; + /* + * Call H5Pget_copy_object function. + */ + ret = H5Pget_copy_object((hid_t)*ocp_plist_id, &c_copy_options); + if (ret < 0) return ret_value; + + *copy_options = (int_f)c_copy_options; + + ret_value = 0; + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5pget_data_transform_c + * Purpose: Calls H5Pget_data_transform + * Inputs: + * prp_id - property list identifier to query + * expression_len - buffer size transorm expression + * + * Output: + * expression - buffer to hold transform expression + * + * Returns: + * Success: 0 + * Failure: -1 + * + * Programmer: M.S. Breitenfeld + * March 19, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5pget_data_transform_c(hid_t_f *plist_id, _fcd expression, int_f *expression_len, size_t_f *size) +{ + int_f ret_value = -1; + char *c_expression = NULL; /* Buffer to hold C string */ + size_t c_expression_len; + ssize_t ret; + + + c_expression_len = (size_t)*expression_len + 1; + + /* should expression_len be size_t_f? */ + /* + * Allocate memory to store the expression. + */ + if( c_expression_len) c_expression = (char*) HDmalloc(c_expression_len); + if (c_expression == NULL) return ret_value; + + /* + * Call h5pget_data_transform function. + */ + ret = H5Pget_data_transform((hid_t)*plist_id, c_expression, c_expression_len); + if(ret < 0) return ret_value; + /* or strlen ? */ + HD5packFstring(c_expression, _fcdtocp(expression), c_expression_len-1); + + *size = (size_t_f)ret; + + ret_value = 0; + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5pset_data_transform_c + * Purpose: Calls H5Pset_data_transform + * Inputs: + * prp_id - property list identifier to query + * expression - buffer to hold transform expression + * expression_len - buffer size transorm expression + * + * Output: + * + * Returns: + * Success: 0 + * Failure: -1 + * + * Programmer: M.S. Breitenfeld + * March 19, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5pset_data_transform_c(hid_t_f *plist_id, _fcd expression, int_f *expression_len) +{ + int_f ret_value = -1; /* Return value */ + char* c_expression = NULL; /* Buffer to hold C string */ + herr_t ret; + /* + * Convert FORTRAN name to C name + */ + if(NULL == (c_expression = HD5f2cstring(expression, (size_t)*expression_len))) + return ret_value; + /* + * Call h5pset_data_transform function. + */ + ret = H5Pset_data_transform((hid_t)*plist_id, c_expression); + if(ret<0) return ret_value; + + ret_value = 0; + if(c_expression) + HDfree(c_expression); + + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5pget_local_heap_size_hint_c + * Purpose: Calls H5Pget_local_heap_size_hint + * Inputs: + * gcpl_id - Group creation property list identifier + * + * Output: + * size_hint - Hint for size of local heap + * Returns: + * Success: 0 + * Failure: -1 + * + * Programmer: M.S. Breitenfeld + * March 21, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5pget_local_heap_size_hint_c(hid_t_f *gcpl_id, size_t_f *size_hint) +{ + int_f ret_value = -1; /* Return value */ + size_t c_size_hint; + herr_t ret; + /* + * Call H5Pget_local_heap_size_hint function. + */ + ret = H5Pget_local_heap_size_hint((hid_t)*gcpl_id, &c_size_hint); + if(ret<0) return ret_value; + + *size_hint = (size_t_f)c_size_hint; + ret_value = 0; + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5pget_est_link_info_c + * Purpose: Calls H5Pget_est_link_info + * Inputs: + * gcpl_id - Group creation property list identifier + * + * Output: + * est_num_entries - Estimated number of links to be inserted into group + * est_name_len - Estimated average length of link names + * Returns: + * Success: 0 + * Failure: -1 + * + * Programmer: M.S. Breitenfeld + * March 21, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5pget_est_link_info_c(hid_t_f *gcpl_id, int_f *est_num_entries, int_f *est_name_len) +{ + int_f ret_value = -1; /* Return value */ + unsigned c_est_num_entries; + unsigned c_est_name_len; + herr_t ret; + /* + * Call h5pget_est_link_info function. + */ + ret = H5Pget_est_link_info((hid_t)*gcpl_id, &c_est_num_entries, &c_est_name_len); + if(ret<0) return ret_value; + + *est_num_entries = (int_f)c_est_num_entries; + *est_name_len = (int_f)c_est_name_len; + + ret_value = 0; + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5pset_local_heap_size_hint_c + * Purpose: Calls H5Pset_local_heap_size_hint + * Inputs: + * gcpl_id - Group creation property list identifier + * size_hint - Hint for size of local heap + * + * Output: + * + * Returns: + * Success: 0 + * Failure: -1 + * + * Programmer: M.S. Breitenfeld + * March 21, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5pset_local_heap_size_hint_c(hid_t_f *gcpl_id, size_t_f *size_hint) +{ + int_f ret_value = -1; /* Return value */ + herr_t ret; + /* + * Call H5Pget_local_heap_size_hint function. + */ + ret = H5Pset_local_heap_size_hint((hid_t)*gcpl_id, (size_t)*size_hint); + if(ret<0) return ret_value; + + ret_value = 0; + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5pset_est_link_info_c + * Purpose: Calls H5Pset_est_link_info + * Inputs: + * gcpl_id - Group creation property list identifier + * est_num_entries - Estimated number of links to be inserted into group + * est_name_len - Estimated average length of link names + * + * Output: + * Returns: + * Success: 0 + * Failure: -1 + * + * Programmer: M.S. Breitenfeld + * March 21, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5pset_est_link_info_c(hid_t_f *gcpl_id, int_f *est_num_entries, int_f *est_name_len) +{ + int_f ret_value = -1; /* Return value */ + herr_t ret; + /* + * Call h5pset_est_link_info function. + */ + ret = H5Pset_est_link_info((hid_t)*gcpl_id, (unsigned)*est_num_entries, (unsigned)*est_name_len); + if(ret<0) return ret_value; + + ret_value = 0; + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5pset_link_phase_change_c + * Purpose: Calls H5Pset_link_phase_change + * + * Inputs: gcpl_id - Group creation property list identifier + * max_compact - Maximum number of attributes to be stored in compact storage + * min_dense - Minimum number of attributes to be stored in dense storage + * Outputs + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * March 21, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5pset_link_phase_change_c(hid_t_f *gcpl_id, int_f *max_compact, int_f *min_dense ) +{ + int ret_value = -1; + herr_t ret; + + /* + * Call H5Pset_link_phase_change function. + */ + ret = H5Pset_link_phase_change((hid_t)*gcpl_id, (unsigned)*max_compact,(unsigned)*min_dense); + if (ret < 0) return ret_value; + + ret_value = 0; + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5pset_fapl_direct_c + * Purpose: Calls H5Pset_fapl_direct + * + * Inputs: + * fapl_id - File access property list identifier + * alignment - Required memory alignment boundary + * block_size - File system block size + * cbuf_size - Copy buffer size + * Outputs + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * March 21, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5pset_fapl_direct_c(hid_t_f *fapl_id, size_t_f *alignment, size_t_f *block_size, size_t_f *cbuf_size ) +{ + int ret_value = -1; + herr_t ret; + + /* + * Call H5Pset_link_phase_change function. + */ +#ifdef H5_HAVE_DIRECT + ret = H5Pset_fapl_direct((hid_t)*fapl_id, (size_t)*alignment, (size_t)*block_size, (size_t)*cbuf_size ); + if (ret < 0) return ret_value; + + ret_value = 0; + +#endif + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5pget_fapl_direct_c + * Purpose: Calls H5Pget_fapl_direct + * + * Inputs: + * fapl_id - File access property list identifier + * Outputs: + * alignment - Required memory alignment boundary + * block_size - File system block size + * cbuf_size - Copy buffer size + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * March 21, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5pget_fapl_direct_c(hid_t_f *fapl_id, size_t_f *alignment, size_t_f *block_size, size_t_f *cbuf_size ) +{ + int ret_value = -1; + herr_t ret; + size_t c_alignment; + size_t c_block_size; + size_t c_cbuf_size; + + /* + * Call H5Pget_link_phase_change function. + */ +#ifdef H5_HAVE_DIRECT + ret = H5Pget_fapl_direct((hid_t)*fapl_id, &c_alignment, &c_block_size, &c_cbuf_size ); + if (ret < 0) return ret_value; + + *alignment = (size_t_f)c_alignment; + *block_size = (size_t_f)c_block_size; + *cbuf_size = (size_t_f)c_cbuf_size; + + ret_value = 0; +#endif + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5pset_attr_phase_change_c + * Purpose: Calls H5Pset_attr_phase_change + * + * Inputs: ocpl_id - Object (dataset or group) creation property list identifier + * max_compact - Maximum number of attributes to be stored in compact storage + * min_dense - Minimum number of attributes to be stored in dense storage + * Outputs: + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * March 21, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5pset_attr_phase_change_c(hid_t_f *ocpl_id, int_f *max_compact, int_f *min_dense ) +{ + int ret_value = -1; + herr_t ret; + /* + * Call H5Pset_attr_phase_change function. + */ + ret = H5Pset_attr_phase_change((hid_t)*ocpl_id, (unsigned)*max_compact,(unsigned)*min_dense); + if (ret < 0) return ret_value; + + ret_value = 0; + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5pset_nbit_c + * Purpose: Calls H5Pset_nbit + * + * Inputs: plist_id - Dataset creation property list identifier + * Outputs: + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * March 21, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5pset_nbit_c(hid_t_f *plist_id ) +{ + int ret_value = -1; + herr_t ret; + /* + * Call H5Pset_nbit_change function. + */ + ret = H5Pset_nbit((hid_t)*plist_id); + if (ret < 0) return ret_value; + + ret_value = 0; + return ret_value; +} +/*---------------------------------------------------------------------------- + * Name: h5pset_scaleoffset_c + * Purpose: Calls H5Pset_scaleoffset + * + * Inputs: + * plist_id - Dataset creation property list identifier + * scale_type - Flag indicating compression method. + * scale_factor - Parameter related to scale. + * Outputs: + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * March 21, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5pset_scaleoffset_c(hid_t_f *plist_id, int_f *scale_type, int_f *scale_factor ) +{ + int ret_value = -1; + H5Z_SO_scale_type_t c_scale_type; + herr_t ret; + /* + * Call H5Pset_scaleoffset_change function. + */ + c_scale_type = (H5Z_SO_scale_type_t)*scale_type; + + ret = H5Pset_scaleoffset((hid_t)*plist_id, c_scale_type, (int)*scale_factor); + if (ret < 0) return ret_value; + + ret_value = 0; + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5pset_nlinks + * Purpose: Calls H5Pset_nlinks + * + * Inputs: + * lapl_id - File access property list identifier + * nlinks - Maximum number of links to traverse + * Outputs: + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * March 24, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5pset_nlinks_c(hid_t_f *lapl_id, size_t_f *nlinks) +{ + int ret_value = -1; + herr_t ret; + /* + * Call H5Pset_nlinks function. + */ + ret = H5Pset_nlinks((hid_t)*lapl_id, (size_t)*nlinks); + if (ret < 0) return ret_value; + + ret_value = 0; + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5pget_nlinks + * Purpose: Calls H5Pget_nlinks + * + * Inputs: + * lapl_id - File access property list identifier + * + * Outputs: + * nlinks - Maximum number of links to traverse + * + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * March 24, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5pget_nlinks_c(hid_t_f *lapl_id, size_t_f *nlinks) +{ + int ret_value = -1; + herr_t ret; + size_t c_nlinks; + /* + * Call H5Pget_nlinks function. + */ + ret = H5Pget_nlinks((hid_t)*lapl_id, &c_nlinks); + if (ret < 0) return ret_value; + + *nlinks = (size_t_f)c_nlinks; + ret_value = 0; + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5pget_create_inter_group_c + * Purpose: Calls H5Pget_create_intermediate_group + * + * Inputs: + * lcpl_id - Link creation property list identifier + * crt_intermed_group - Specifying whether to create intermediate groups upon + * the creation of an object + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * April 4, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ + +int_f +nh5pget_create_inter_group_c(hid_t_f *lcpl_id, int_f *crt_intermed_group) +{ + int ret_value = -1; + herr_t ret; + + /* + * Call H5Pget_create_intermediate_group function. + */ + ret = H5Pget_create_intermediate_group((hid_t)*lcpl_id, (unsigned)*crt_intermed_group); + + if (ret < 0) return ret_value; /* error occurred */ + ret_value = 0; + return ret_value; +} diff --git a/fortran/src/H5Pff.f90 b/fortran/src/H5Pff.f90 index 1c1fb90..2747add 100644 --- a/fortran/src/H5Pff.f90 +++ b/fortran/src/H5Pff.f90 @@ -1943,7 +1943,7 @@ hdferr = h5pget_fapl_core_c(prp_id, increment, backing_store_flag) backing_store =.FALSE. - if (backing_store_flag .eq. 1) backing_store =.TRUE. + IF (backing_store_flag .EQ. 1) backing_store =.TRUE. END SUBROUTINE h5pget_fapl_core_f !---------------------------------------------------------------------- @@ -4665,19 +4665,18 @@ !---------------------------------------------------------------------- ! Name: h5pget_class_name_f ! -! Purpose: Queries the ithe name of a class. +! Purpose: Queries the name of a class. ! ! Inputs: ! prp_id - property list identifier to query ! Outputs: ! name - name of a class -! hdferr: - error code -! -! Success: Actual lenght of the class name -! If provided buffer "name" is -! smaller, than name will be -! truncated to fit into -! provided user buffer +! size - Actual length of the class name +! If provided buffer "name" is smaller, +! than name will be truncated to fit into +! provided user buffer +! hdferr: - error code +! Success: 0 ! Failure: -1 ! Optional parameters: ! NONE @@ -4685,12 +4684,12 @@ ! Programmer: Elena Pourmal ! October 9, 2002 ! -! Modifications: +! Modifications: Returned the size of name as an argument ! ! Comment: !---------------------------------------------------------------------- - SUBROUTINE h5pget_class_name_f(prp_id, name, hdferr) + SUBROUTINE h5pget_class_name_f(prp_id, name, size, hdferr) ! !This definition is needed for Windows DLLs !DEC$if defined(BUILD_HDF5_DLL) @@ -4699,7 +4698,9 @@ ! IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier - CHARACTER(LEN=*), INTENT(INOUT) :: name ! Buffer to retireve class name + CHARACTER(LEN=*), INTENT(OUT) :: name ! Buffer to retireve class name + + INTEGER, INTENT(OUT) :: size ! Actual length of the class name INTEGER, INTENT(OUT) :: hdferr ! Error code INTEGER :: name_len @@ -4715,8 +4716,13 @@ INTEGER, INTENT(IN) :: name_len END FUNCTION h5pget_class_name_c END INTERFACE + name_len = LEN(name) - hdferr = h5pget_class_name_c(prp_id, name , name_len) + size = h5pget_class_name_c(prp_id, name, name_len) + + hdferr = 0 + IF(size.LT.0) hdferr = -1 + END SUBROUTINE h5pget_class_name_f !---------------------------------------------------------------------- @@ -6387,4 +6393,1764 @@ hdferr = h5premove_filter_c(prp_id, filter) END SUBROUTINE h5premove_filter_f - END MODULE H5P +!---------------------------------------------------------------------- +! Name: H5Pget_attr_phase_change_f +! +! Purpose: Retrieves attribute storage phase change thresholds +! +! Inputs: +! ocpl_id - Object (dataset or group) creation property list identifier +! Outputs: +! max_compact - Maximum number of attributes to be stored in compact storage +! (Default: 8) +! min_dense - Minimum number of attributes to be stored in dense storage +! (Default: 6) +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! January, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE h5pget_attr_phase_change_f(ocpl_id, max_compact, min_dense, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pget_attr_phase_change_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: ocpl_id ! Object (dataset or group) creation property list identifier + INTEGER, INTENT(OUT) :: max_compact ! Maximum number of attributes to be stored in compact storage + !(Default: 8) + INTEGER, INTENT(OUT) :: min_dense ! Minimum number of attributes to be stored in dense storage + ! (Default: 6) + INTEGER, INTENT(OUT) :: hdferr ! Error code +! +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5pget_attr_phase_change_c(ocpl_id, max_compact, min_dense) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5PGET_ATTR_PHASE_CHANGE_C'::h5pget_attr_phase_change_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: ocpl_id + INTEGER, INTENT(OUT) :: max_compact + INTEGER, INTENT(OUT) :: min_dense + + END FUNCTION h5pget_attr_phase_change_c + END INTERFACE + + hdferr = h5pget_attr_phase_change_c(ocpl_id, max_compact, min_dense) + END SUBROUTINE h5pget_attr_phase_change_f + +!---------------------------------------------------------------------- +! Name: H5Pset_attr_creation_order_f +! +! Purpose: Sets tracking and indexing of attribute creation order +! +! Inputs: +! ocpl_id - Object creation property list identifier +! crt_order_flags - Flags specifying whether to track and index attribute creation order +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! January, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE h5pset_attr_creation_order_f(ocpl_id, crt_order_flags , hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pset_attr_creation_order_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: ocpl_id ! Object (dataset or group) creation property list identifier + INTEGER, INTENT(IN) :: crt_order_flags ! Flags specifying whether to track and index attribute creation order + + INTEGER, INTENT(OUT) :: hdferr ! Error code +! +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION H5Pset_attr_creation_order_c(ocpl_id, crt_order_flags) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5PSET_ATTR_CREATION_ORDER_C'::h5pset_attr_creation_order_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: ocpl_id + INTEGER, INTENT(IN) :: crt_order_flags + + END FUNCTION H5Pset_attr_creation_order_c + END INTERFACE + + hdferr = H5Pset_attr_creation_order_c(ocpl_id, crt_order_flags) + END SUBROUTINE h5pset_attr_creation_order_f + + +!---------------------------------------------------------------------- +! Name: H5Pset_shared_mesg_nindexes_f +! +! Purpose: Sets number of shared object header message indexes +! +! Inputs: +! plist_id - file creation property list +! nindexes - Number of shared object header message indexes to be available in files created with this property list +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! January, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE h5pset_shared_mesg_nindexes_f( plist_id, nindexes, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pset_shared_mesg_nindexes_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: plist_id ! file creation property list + INTEGER, INTENT(IN) :: nindexes ! Number of shared object header message indexes + ! available in files created WITH this property list + INTEGER, INTENT(OUT) :: hdferr ! Error code +! +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5pset_shared_mesg_nindexes_c(plist_id, nindexes) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5PSET_SHARED_MESG_NINDEXES_C'::h5pset_shared_mesg_nindexes_c + !DEC$ ENDIF + + INTEGER(HID_T), INTENT(IN) :: plist_id + INTEGER, INTENT(IN) :: nindexes + + END FUNCTION H5pset_shared_mesg_nindexes_c + END INTERFACE + + hdferr = h5pset_shared_mesg_nindexes_c(plist_id, nindexes) + + END SUBROUTINE h5pset_shared_mesg_nindexes_f + +!---------------------------------------------------------------------- +! Name: H5Pset_shared_mesg_index_f +! +! Purpose: Configures the specified shared object header message index +! +! Inputs: +! fcpl_id - File creation property list identifier. +! index_num - Index being configured. +! mesg_type_flags - Types of messages that should be stored in this index. +! min_mesg_size - Minimum message size. +! +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! January, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE h5pset_shared_mesg_index_f(fcpl_id, index_num, mesg_type_flags, min_mesg_size, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pset_shared_mesg_index_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: fcpl_id ! file creation property list + INTEGER, INTENT(IN) :: index_num ! Index being configured. + INTEGER, INTENT(IN) :: mesg_type_flags ! Types of messages that should be stored in this index. + INTEGER, INTENT(IN) :: min_mesg_size ! Minimum message size. + INTEGER, INTENT(OUT) :: hdferr ! Error code +! +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5pset_shared_mesg_index_c(fcpl_id, index_num, mesg_type_flags, min_mesg_size) + + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5PSET_SHARED_MESG_INDEX_C'::h5pset_shared_mesg_index_c + !DEC$ ENDIF + + INTEGER(HID_T), INTENT(IN) :: fcpl_id + INTEGER, INTENT(IN) :: index_num + INTEGER, INTENT(IN) :: mesg_type_flags + INTEGER, INTENT(IN) :: min_mesg_size + + END FUNCTION H5pset_shared_mesg_index_c + END INTERFACE + + hdferr = h5pset_shared_mesg_index_c(fcpl_id, index_num, mesg_type_flags, min_mesg_size) + + END SUBROUTINE h5pset_shared_mesg_index_f + +!---------------------------------------------------------------------- +! Name: H5Pget_attr_creation_order_f +! +! Purpose: Retrieves tracking and indexing settings for attribute creation order +! +! Inputs: +! ocpl_id - Object (group or dataset) creation property list identifier +! +! Outputs: +! crt_order_flags - Flags specifying whether to track and index attribute creation order +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! February, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE h5pget_attr_creation_order_f(ocpl_id, crt_order_flags, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pget_attr_creation_order_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: ocpl_id ! Object (group or dataset) creation property list identifier + INTEGER, INTENT(OUT) :: crt_order_flags ! Flags specifying whether to track and index attribute creation order + INTEGER, INTENT(OUT) :: hdferr ! Error code +! +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5pget_attr_creation_order_c(ocpl_id, crt_order_flags) + + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5PGET_ATTR_CREATION_ORDER_C'::h5pget_attr_creation_order_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: ocpl_id + INTEGER, INTENT(OUT) :: crt_order_flags + + END FUNCTION H5pget_attr_creation_order_c + END INTERFACE + + hdferr = h5pget_attr_creation_order_c(ocpl_id, crt_order_flags) + + END SUBROUTINE h5pget_attr_creation_order_f + +!---------------------------------------------------------------------- +! Name: H5Pset_libver_bounds_f +! +! Purpose: Sets bounds on library versions, and indirectly format versions, to be used when creating objects. +! +! Inputs: +! fapl_id - File access property list identifier +! low - The earliest version of the library that will be used for writing objects. +! high - The latest version of the library that will be used for writing objects. +! +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! February 18, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE h5pset_libver_bounds_f(fapl_id, low, high, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pset_libver_bounds_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: fapl_id ! File access property list identifier + INTEGER, INTENT(IN) :: low ! The earliest version of the library that will be used for writing objects. + ! Currently, low must be one of two pre-defined values: + ! HDF_LIBVER_EARLIEST_F + ! HDF_LIBVER_LATEST_F + INTEGER, INTENT(IN) :: high ! The latest version of the library that will be used for writing objects. + ! Currently, low must set to the pre-defined value: + ! HDF_LIBVER_LATEST_F + INTEGER, INTENT(OUT) :: hdferr ! Error code +! +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5pset_libver_bounds_c(fapl_id, low, high) + + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5PSET_LIBVER_BOUNDS_C'::h5pset_libver_bounds_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: fapl_id + INTEGER, INTENT(IN) :: low + INTEGER, INTENT(IN) :: high + + END FUNCTION H5pset_libver_bounds_c + END INTERFACE + + hdferr = h5pset_libver_bounds_c(fapl_id, low, high) + + END SUBROUTINE h5pset_libver_bounds_f + +!---------------------------------------------------------------------- +! Name: H5Pset_link_creation_order_f +! +! Purpose: Sets creation order tracking and indexing for links in a group. +! +! Inputs: +! gcpl_id - Group creation property list identifier +! crt_order_flags - Creation order flag(s) +! +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! February 18, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE h5pset_link_creation_order_f(gcpl_id, crt_order_flags, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pset_libver_bounds_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: gcpl_id ! File access property list identifier + INTEGER, INTENT(IN) :: crt_order_flags ! Creation order flag(s) + INTEGER, INTENT(OUT) :: hdferr ! Error code +! +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5pset_link_creation_order_c(gcpl_id, crt_order_flags) + + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5PSET_LINK_CREATION_ORDER_C'::h5pset_link_creation_order_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: gcpl_id + INTEGER, INTENT(IN) :: crt_order_flags + + END FUNCTION H5pset_link_creation_order_c + END INTERFACE + + hdferr = h5pset_link_creation_order_c(gcpl_id, crt_order_flags) + + END SUBROUTINE h5pset_link_creation_order_f + +!---------------------------------------------------------------------- +! Name: H5Pget_link_phase_change_f +! +! Purpose: Queries the settings for conversion between compact and dense groups. +! +! Inputs: +! gcpl_id - Group creation property list identifier +! Outputs: +! max_compact - Maximum number of attributes to be stored in compact storage +! min_dense - Minimum number of attributes to be stored in dense storage +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! February 20, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE h5pget_link_phase_change_f(gcpl_id, max_compact, min_dense, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pget_link_phase_change_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: gcpl_id ! Group creation property list identifier + INTEGER, INTENT(OUT) :: max_compact ! Maximum number of attributes to be stored in compact storage + INTEGER, INTENT(OUT) :: min_dense ! Minimum number of attributes to be stored in dense storage + INTEGER, INTENT(OUT) :: hdferr ! Error code +! +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5pget_link_phase_change_c(gcpl_id, max_compact, min_dense) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5PGET_LINK_PHASE_CHANGE_C'::h5pget_link_phase_change_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: gcpl_id + INTEGER, INTENT(OUT) :: max_compact + INTEGER, INTENT(OUT) :: min_dense + + END FUNCTION h5pget_link_phase_change_c + END INTERFACE + + hdferr = h5pget_link_phase_change_c(gcpl_id, max_compact, min_dense) + END SUBROUTINE h5pget_link_phase_change_f + +!---------------------------------------------------------------------- +! Name: H5Pget_obj_track_times_f +! +! Purpose: Returns whether times are tracked for an object. +! +! Inputs: +! plist_id - property list id +! flag - object timestamp setting +! .TRUE.,.FALSE. +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! February 22, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE h5pget_obj_track_times_f(plist_id, flag, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pget_obj_track_times_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: plist_id ! Dataset creation property + ! list identifier + LOGICAL, INTENT(OUT) :: flag ! Object timestamp setting + INTEGER, INTENT(OUT) :: hdferr ! Error code + INTEGER :: status +! +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5pget_obj_track_times_c(plist_id, status) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5PGET_OBJ_TRACK_TIMES_C'::h5pget_obj_track_times_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: plist_id ! File creation property list identifier + INTEGER, INTENT(OUT) :: status + END FUNCTION h5pget_obj_track_times_c + END INTERFACE + flag = .TRUE. + hdferr = h5pget_obj_track_times_c(plist_id, status) + IF(status.EQ.0) flag = .FALSE. + + END SUBROUTINE h5pget_obj_track_times_f + +!---------------------------------------------------------------------- +! Name: H5Pset_obj_track_times_f +! +! Purpose: Set whether the birth, access, modification & change times for +! an object are stored. +! +! Birth time is the time the object was created. Access time is +! the last time that metadata or raw data was read from this +! object. Modification time is the last time the data for +! this object was changed (either writing raw data to a dataset +! or inserting/modifying/deleting a link in a group). Change +! time is the last time the metadata for this object was written +! (adding/modifying/deleting an attribute on an object, extending +! the size of a dataset, etc). +! +! If these times are not tracked, they will be reported as +! 12:00 AM UDT, Jan. 1, 1970 (i.e. 0 seconds past the UNIX +! epoch) when queried. +! +! Inputs: +! plist_id - property list id +! flag - object timestamp setting +! .TRUE.,.FALSE. +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! February 22, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE h5pset_obj_track_times_f(plist_id, flag, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pset_obj_track_times_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: plist_id ! Dataset creation property + ! list identifier + LOGICAL, INTENT(IN) :: flag ! Object timestamp setting + INTEGER, INTENT(OUT) :: hdferr ! Error code + INTEGER :: status +! +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5pset_obj_track_times_c(plist_id, status) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5PSET_OBJ_TRACK_TIMES_C'::h5pset_obj_track_times_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: plist_id ! File creation property list identifier + INTEGER, INTENT(IN) :: status + END FUNCTION h5pset_obj_track_times_c + END INTERFACE + + status = 0 + IF(flag) status = 1 + + hdferr = h5pset_obj_track_times_c(plist_id, status) + + END SUBROUTINE h5pset_obj_track_times_f + +!---------------------------------------------------------------------- +! Name: H5Pset_create_inter_group_f +! +! Purpose: Specifies in property list whether to create missing intermediate groups. +! +! Inputs: +! lcpl_id - Link creation property list identifier +! crt_intermed_group - crt_intermed_group specifying whether +! to create intermediate groups upon the creation +! of an object +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! February 22, 2008 +! +! Modifications: +! +! Comment: The long subroutine name (>31) on older f90 compilers causes problems +! so had to shorten the name +!-------------------------------------------------------------------------------------- + + SUBROUTINE h5pset_create_inter_group_f(lcpl_id, crt_intermed_group, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pset_create_inter_group_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: lcpl_id ! Link creation property list identifier + INTEGER, INTENT(IN) :: crt_intermed_group ! specifying whether to create intermediate groups + ! upon the creation of an object + INTEGER, INTENT(OUT) :: hdferr ! Error code +! +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5pset_create_inter_group_c(lcpl_id, crt_intermed_group) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5PSET_CREATE_INTER_GROUP_C'::h5pset_create_inter_group_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: lcpl_id + INTEGER, INTENT(IN) :: crt_intermed_group + END FUNCTION h5pset_create_inter_group_c + END INTERFACE + + hdferr = h5pset_create_inter_group_c(lcpl_id, crt_intermed_group) + + END SUBROUTINE h5pset_create_inter_group_f + +!---------------------------------------------------------------------- +! Name: H5Pget_link_creation_order_f +! +! Purpose: Queries whether link creation order is tracked and/or indexed in a group. +! +! Inputs: +! gcpl_id - Group creation property list identifier +! +! Outputs: +! crt_order_flags - Creation order flag(s) +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! March 3, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE h5pget_link_creation_order_f(gcpl_id, crt_order_flags, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pget_link_creation_order_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: gcpl_id ! Group creation property list identifier + INTEGER, INTENT(OUT) :: crt_order_flags ! Creation order flag(s) + INTEGER, INTENT(OUT) :: hdferr ! Error code +! +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5pget_link_creation_order_c(gcpl_id, crt_order_flags) + + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5PGET_LINK_CREATION_ORDER_C'::h5pget_link_creation_order_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: gcpl_id + INTEGER, INTENT(OUT) :: crt_order_flags + + END FUNCTION H5pget_link_creation_order_c + END INTERFACE + + hdferr = h5pget_link_creation_order_c(gcpl_id, crt_order_flags) + + END SUBROUTINE h5pget_link_creation_order_f + +!---------------------------------------------------------------------- +! Name: H5Pset_char_encoding +! +! Purpose: Sets the character encoding used to encode a string. +! +! Inputs: +! plist_id - Property list identifier +! encoding - Valid values for encoding are: +! H5T_CSET_ASCII_F -> US ASCII +! H5T_CSET_UTF8_F -> UTF-8 Unicode encoding +! +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! March 3, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE h5pset_char_encoding_f(plist_id, encoding, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pset_attr_creation_order_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: plist_id ! Property list identifier + + INTEGER, INTENT(IN) :: encoding ! String encoding character set: +! H5T_CSET_ASCII_F -> US ASCII +! H5T_CSET_UTF8_F -> UTF-8 Unicode encoding + INTEGER, INTENT(OUT) :: hdferr ! Error code +! +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5pset_char_encoding_c(plist_id, encoding) + + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5PSET_CHAR_ENCODING_C'::h5pset_char_encoding_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: plist_id + INTEGER, INTENT(IN) :: encoding + + END FUNCTION H5pset_char_encoding_c + END INTERFACE + + hdferr = h5pset_char_encoding_c(plist_id, encoding) + + END SUBROUTINE h5pset_char_encoding_f + +!---------------------------------------------------------------------- +! Name: H5Pget_char_encoding +! +! Purpose: Retrieves the character encoding used to create a string +! +! Inputs: +! plist_id - Property list identifier +! +! Outputs: +! encoding - Valid values for encoding are: +! H5T_CSET_ASCII_F -> US ASCII +! H5T_CSET_UTF8_F -> UTF-8 Unicode encoding +! hdferr - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! March 3, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE h5pget_char_encoding_f(plist_id, encoding, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pget_char_encoding_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: plist_id ! Property list identifier + + INTEGER, INTENT(OUT) :: encoding ! Valid values for encoding are: +! H5T_CSET_ASCII_F -> US ASCII +! H5T_CSET_UTF8_F -> UTF-8 Unicode encoding + INTEGER, INTENT(OUT) :: hdferr ! Error code +! +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5pget_char_encoding_c(plist_id, encoding) + + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5PGET_CHAR_ENCODING_C'::h5pget_char_encoding_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: plist_id + INTEGER, INTENT(OUT) :: encoding + + END FUNCTION H5pget_char_encoding_c + END INTERFACE + + hdferr = h5pget_char_encoding_c(plist_id, encoding) + + END SUBROUTINE h5pget_char_encoding_f + +!---------------------------------------------------------------------- +! Name: h5pset_copy_object_f +! +! Purpose: Sets properties to be used when an object is copied. +! +! Inputs: +! ocp_plist_id - Object copy property list identifier +! copy_options - Copy option(s) to be set +! Outputs: +! hdferr - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! March 3, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE h5pset_copy_object_f(ocp_plist_id, copy_options, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pset_copy_object_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: ocp_plist_id ! Object copy property list identifier + INTEGER, INTENT(IN) :: copy_options ! Copy option(s) to be set, valid options are: + ! H5O_COPY_SHALLOW_HIERARCHY_F + ! H5O_COPY_EXPAND_SOFT_LINK_F + ! H5O_COPY_EXPAND_EXT_LINK_F + ! H5O_COPY_EXPAND_REFERENCE_F + ! H5O_COPY_WITHOUT_ATTR_FLAG_F + INTEGER, INTENT(OUT) :: hdferr ! Error code + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5pset_copy_object_c(ocp_plist_id, copy_options) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5PSET_COPY_OBJECT_C'::h5pset_copy_object_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: ocp_plist_id + INTEGER, INTENT(IN) :: copy_options + END FUNCTION h5pset_copy_object_c + END INTERFACE + hdferr = h5pset_copy_object_c(ocp_plist_id, copy_options) + END SUBROUTINE h5pset_copy_object_f + +!---------------------------------------------------------------------- +! Name: h5pget_copy_object_f +! +! Purpose: Retrieves the properties to be used when an object is copied. +! +! Inputs: +! ocp_plist_id - Object copy property list identifier +! Outputs: +! copy_options - Copy option(s) to be get +! hdferr - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! March 3, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE h5pget_copy_object_f(ocp_plist_id, copy_options, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pget_copy_object_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: ocp_plist_id ! Object copy property list identifier + INTEGER, INTENT(OUT) :: copy_options ! valid copy options returned are: + ! H5O_COPY_SHALLOW_HIERARCHY_F + ! H5O_COPY_EXPAND_SOFT_LINK_F + ! H5O_COPY_EXPAND_EXT_LINK_F + ! H5O_COPY_EXPAND_REFERENCE_F + ! H5O_COPY_WITHOUT_ATTR_FLAG_F + INTEGER, INTENT(OUT) :: hdferr ! Error code + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5pget_copy_object_c(ocp_plist_id, copy_options) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5PGET_COPY_OBJECT_C'::h5pget_copy_object_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: ocp_plist_id + INTEGER, INTENT(OUT) :: copy_options + END FUNCTION h5pget_copy_object_c + END INTERFACE + hdferr = h5pget_copy_object_c(ocp_plist_id, copy_options) + END SUBROUTINE h5pget_copy_object_f + +!---------------------------------------------------------------------- +! Name: h5pget_data_transform_f +! +! Purpose: Retrieves a data transform expression. +! +! Inputs: +! plist_id - Identifier of the property list or class +! Outputs: +! expression - buffer to hold transform expression +! hdferr - error code +! Success: Actual lenght of the expression +! If provided buffer "expression" is +! smaller, than expression will be +! truncated to fit into +! provided user buffer +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! March 19, 2008 +! +! Modifications: +! +! Comment: Should hdferr return just 0 or 1 and add another arguement for the size? +!---------------------------------------------------------------------- + + SUBROUTINE h5pget_data_transform_f(plist_id, expression, hdferr, size) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pget_data_transform_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: plist_id ! Identifier of the property list or class + CHARACTER(LEN=*), INTENT(OUT) :: expression ! Buffer to hold transform expression + + INTEGER(SIZE_T), INTENT(OUT), OPTIONAL :: size ! registered size of the transform expression + + INTEGER, INTENT(OUT) :: hdferr ! Error code + INTEGER :: expression_len + INTEGER(SIZE_T) :: size_default + + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5pget_data_transform_c(plist_id, expression, expression_len, size_default) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5PGET_DATA_TRANSFORM_C'::h5pget_data_transform_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: plist_id + CHARACTER(LEN=*), INTENT(OUT) :: expression + INTEGER(SIZE_T) :: size_default + INTEGER :: expression_len + END FUNCTION h5pget_data_transform_c + END INTERFACE + + size_default = 0 + expression_len = LEN(expression) + + hdferr = h5pget_data_transform_c(plist_id, expression, expression_len, size_default) + + IF(present(size)) size = size_default + + END SUBROUTINE h5pget_data_transform_f + +!---------------------------------------------------------------------- +! Name: h5pset_data_transform_f +! +! Purpose: Sets a data transform expression. +! +! Inputs: +! plist_id - Identifier of the property list or class +! expression - buffer to hold transform expression +! Outputs: +! hdferr - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! March 19, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE h5pset_data_transform_f(plist_id, expression, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pset_data_transform_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: plist_id ! Identifier of the property list or class + CHARACTER(LEN=*), INTENT(IN) :: expression ! Buffer to hold transform expression + INTEGER, INTENT(OUT) :: hdferr ! Error code + INTEGER :: expression_len + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5pset_data_transform_c(plist_id, expression, expression_len) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5PSET_DATA_TRANSFORM_C'::h5pset_data_transform_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: plist_id + CHARACTER(LEN=*), INTENT(IN) :: expression + INTEGER :: expression_len + END FUNCTION h5pset_data_transform_c + END INTERFACE + + expression_len = LEN(expression) + hdferr = h5pset_data_transform_c(plist_id, expression, expression_len) + + END SUBROUTINE h5pset_data_transform_f + +!---------------------------------------------------------------------- +! Name: H5Pget_local_heap_size_hint_f +! +! Purpose: Queries the local heap size hint for original-style groups. +! +! Inputs: +! gcpl_id - Group creation property list identifier +! Outputs: +! size_hint - Hint for size of local heap +! hdferr - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! March 21, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE H5Pget_local_heap_size_hint_f(gcpl_id, size_hint, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pget_local_heap_size_hint_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: gcpl_id ! Group creation property list identifier + INTEGER(SIZE_T), INTENT(OUT) :: size_hint ! Hint for size of local heap + INTEGER, INTENT(OUT) :: hdferr ! Error code + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION H5Pget_local_heap_size_hint_c(gcpl_id, size_hint) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5PGET_LOCAL_HEAP_SIZE_HINT_C'::h5pget_local_heap_size_hint_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: gcpl_id + INTEGER(SIZE_T), INTENT(OUT) :: size_hint + END FUNCTION H5Pget_local_heap_size_hint_c + END INTERFACE + + hdferr = H5Pget_local_heap_size_hint_c(gcpl_id, size_hint) + + END SUBROUTINE H5Pget_local_heap_size_hint_f + +!---------------------------------------------------------------------- +! Name: H5Pget_est_link_info_f +! +! Purpose: Queries data required to estimate required local heap or object header size. +! +! Inputs: +! gcpl_id - Group creation property list identifier +! Outputs: +! est_num_entries - Estimated number of links to be inserted into group +! est_name_len - Estimated average length of link names +! hdferr - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! March 21, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE H5Pget_est_link_info_f(gcpl_id, est_num_entries, est_name_len, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pget_est_link_info_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: gcpl_id ! Group creation property list identifier + INTEGER, INTENT(OUT) :: est_num_entries ! Estimated number of links to be inserted into group + INTEGER, INTENT(OUT) :: est_name_len ! Estimated average length of link names + INTEGER, INTENT(OUT) :: hdferr ! Error code + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION H5Pget_est_link_info_c(gcpl_id, est_num_entries, est_name_len) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5PGET_EST_LINK_INFO_C'::h5pget_est_link_info_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: gcpl_id + INTEGER, INTENT(OUT) :: est_num_entries + INTEGER, INTENT(OUT) :: est_name_len + END FUNCTION H5Pget_est_link_info_c + END INTERFACE + + hdferr = H5Pget_est_link_info_c(gcpl_id, est_num_entries, est_name_len) + + END SUBROUTINE H5Pget_est_link_info_f + +!---------------------------------------------------------------------- +! Name: H5Pset_local_heap_size_hint_f +! +! Purpose: Sets the local heap size hint for original-style groups. +! +! Inputs: +! gcpl_id - Group creation property list identifier +! size_hint - Hint for size of local heap +! Outputs: +! hdferr - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! March 21, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE H5Pset_local_heap_size_hint_f(gcpl_id, size_hint, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pset_local_heap_size_hint_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: gcpl_id ! Group creation property list identifier + INTEGER(SIZE_T), INTENT(IN) :: size_hint ! Hint for size of local heap + INTEGER, INTENT(OUT) :: hdferr ! Error code + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION H5Pset_local_heap_size_hint_c(gcpl_id, size_hint) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5PSET_LOCAL_HEAP_SIZE_HINT_C'::h5pset_local_heap_size_hint_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: gcpl_id + INTEGER(SIZE_T), INTENT(IN) :: size_hint + END FUNCTION H5Pset_local_heap_size_hint_c + END INTERFACE + + hdferr = H5Pset_local_heap_size_hint_c(gcpl_id, size_hint) + + END SUBROUTINE H5Pset_local_heap_size_hint_f + +!---------------------------------------------------------------------- +! Name: H5Pset_est_link_info_f +! +! Purpose: Sets estimated number of links and length of link names in a group. +! +! Inputs: +! gcpl_id - Group creation property list identifier +! est_num_entries - Estimated number of links to be inserted into group +! est_name_len - Estimated average length of link names +! Outputs: +! hdferr - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! March 21, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE H5Pset_est_link_info_f(gcpl_id, est_num_entries, est_name_len, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pset_est_link_info_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: gcpl_id ! Group creation property list identifier + INTEGER, INTENT(IN) :: est_num_entries ! Estimated number of links to be inserted into group + INTEGER, INTENT(IN) :: est_name_len ! Estimated average length of link names + INTEGER, INTENT(OUT) :: hdferr ! Error code + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION H5Pset_est_link_info_c(gcpl_id, est_num_entries, est_name_len) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5PSET_EST_LINK_INFO_C'::h5pset_est_link_info_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: gcpl_id + INTEGER, INTENT(IN) :: est_num_entries + INTEGER, INTENT(IN) :: est_name_len + END FUNCTION H5Pset_est_link_info_c + END INTERFACE + + hdferr = H5Pset_est_link_info_c(gcpl_id, est_num_entries, est_name_len) + + END SUBROUTINE H5Pset_est_link_info_f + +!---------------------------------------------------------------------- +! Name: H5Pset_link_phase_change_f +! +! Purpose: Sets the parameters for conversion between compact and dense groups. +! +! Inputs: +! gcpl_id - Group creation property list identifier +! max_compact - Maximum number of attributes to be stored in compact storage +! min_dense - Minimum number of attributes to be stored in dense storage +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! March 21, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE h5pset_link_phase_change_f(gcpl_id, max_compact, min_dense, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pset_link_phase_change_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: gcpl_id ! Group creation property list identifier + INTEGER, INTENT(IN) :: max_compact ! Maximum number of attributes to be stored in compact storage + INTEGER, INTENT(IN) :: min_dense ! Minimum number of attributes to be stored in dense storage + INTEGER, INTENT(OUT) :: hdferr ! Error code +! +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5pset_link_phase_change_c(gcpl_id, max_compact, min_dense) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5PSET_LINK_PHASE_CHANGE_C'::h5pset_link_phase_change_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: gcpl_id + INTEGER, INTENT(IN) :: max_compact + INTEGER, INTENT(IN) :: min_dense + + END FUNCTION h5pset_link_phase_change_c + END INTERFACE + + hdferr = h5pset_link_phase_change_c(gcpl_id, max_compact, min_dense) + END SUBROUTINE h5pset_link_phase_change_f + +!---------------------------------------------------------------------- +! Name: H5Pset_fapl_direct_f +! +! Purpose: Sets up use of the direct I/O driver. +! +! Inputs: +! fapl_id - File access property list identifier +! alignment - Required memory alignment boundary +! block_size - File system block size +! cbuf_size - Copy buffer size +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! March 21, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE H5Pset_fapl_direct_f(fapl_id, alignment, block_size, cbuf_size, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pset_fapl_direct_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: fapl_id ! File access property list identifier + INTEGER(SIZE_T), INTENT(IN) :: alignment ! Required memory alignment boundary! + INTEGER(SIZE_T), INTENT(IN) :: block_size ! File system block size + INTEGER(SIZE_T), INTENT(IN) :: cbuf_size ! Copy buffer size + INTEGER, INTENT(OUT) :: hdferr ! Error code +! +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION H5Pset_fapl_direct_c(fapl_id, alignment, block_size, cbuf_size) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5PSET_FAPL_DIRECT_C'::h5pset_fapl_direct_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: fapl_id + INTEGER(SIZE_T), INTENT(IN) :: alignment + INTEGER(SIZE_T), INTENT(IN) :: block_size + INTEGER(SIZE_T), INTENT(IN) :: cbuf_size + END FUNCTION H5Pset_fapl_direct_c + END INTERFACE + + hdferr = H5Pset_fapl_direct_c(fapl_id, alignment, block_size, cbuf_size) + END SUBROUTINE H5Pset_fapl_direct_f + +!---------------------------------------------------------------------- +! Name: H5Pget_fapl_direct_f +! +! Purpose: Gets up use of the direct I/O driver. +! +! Inputs: +! fapl_id - File access property list identifier +! Outputs: +! alignment - Required memory alignment boundary +! block_size - File system block size +! cbuf_size - Copy buffer size +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! March 21, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE H5Pget_fapl_direct_f(fapl_id, alignment, block_size, cbuf_size, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pget_fapl_direct_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: fapl_id ! File access property list identifier + INTEGER(SIZE_T), INTENT(OUT) :: alignment ! Required memory alignment boundary! + INTEGER(SIZE_T), INTENT(OUT) :: block_size ! File system block size + INTEGER(SIZE_T), INTENT(OUT) :: cbuf_size ! Copy buffer size + INTEGER, INTENT(OUT) :: hdferr ! Error code +! +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION H5Pget_fapl_direct_c(fapl_id, alignment, block_size, cbuf_size) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5PGET_FAPL_DIRECT_C'::h5pget_fapl_direct_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: fapl_id + INTEGER(SIZE_T), INTENT(OUT) :: alignment + INTEGER(SIZE_T), INTENT(OUT) :: block_size + INTEGER(SIZE_T), INTENT(OUT) :: cbuf_size + END FUNCTION H5Pget_fapl_direct_c + END INTERFACE + + hdferr = H5Pget_fapl_direct_c(fapl_id, alignment, block_size, cbuf_size) + END SUBROUTINE H5Pget_fapl_direct_f + +!---------------------------------------------------------------------- +! Name: H5Pset_attr_phase_change_f +! +! Purpose: Sets attribute storage phase change thresholds. +! +! Inputs: +! ocpl_id - Object (dataset or group) creation property list identifier +! Outputs: +! max_compact - Maximum number of attributes to be stored in compact storage +! (Default: 8) +! min_dense - Minimum number of attributes to be stored in dense storage +! (Default: 6) +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! January, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE h5pset_attr_phase_change_f(ocpl_id, max_compact, min_dense, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pset_attr_phase_change_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: ocpl_id ! Object (dataset or group) creation property list identifier + INTEGER, INTENT(IN) :: max_compact ! Maximum number of attributes to be stored in compact storage + !(Default: 8) + INTEGER, INTENT(IN) :: min_dense ! Minimum number of attributes to be stored in dense storage + ! (Default: 6) + INTEGER, INTENT(OUT) :: hdferr ! Error code +! +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5pset_attr_phase_change_c(ocpl_id, max_compact, min_dense) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5PSET_ATTR_PHASE_CHANGE_C'::h5pset_attr_phase_change_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: ocpl_id + INTEGER, INTENT(IN) :: max_compact + INTEGER, INTENT(IN) :: min_dense + + END FUNCTION h5pset_attr_phase_change_c + END INTERFACE + + hdferr = h5pset_attr_phase_change_c(ocpl_id, max_compact, min_dense) + + + END SUBROUTINE h5pset_attr_phase_change_f + +!---------------------------------------------------------------------- +! Name: H5Pset_nbit_f +! +! Purpose: Sets up the use of the N-Bit filter. +! +! Inputs: +! plist_id - Dataset creation property list identifier. +! Outputs: +! hdferr - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! March 21, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE H5Pset_nbit_f(plist_id, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pset_nbit_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: plist_id ! Dataset creation property list identifier + INTEGER, INTENT(OUT) :: hdferr ! Error code + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION H5Pset_nbit_c(plist_id) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5PSET_NBIT_C'::h5pset_nbit_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: plist_id + END FUNCTION H5Pset_nbit_c + END INTERFACE + + hdferr = H5Pset_nbit_c(plist_id) + + END SUBROUTINE H5Pset_nbit_f + +!---------------------------------------------------------------------- +! Name: H5Pset_scaleoffset_f +! +! Purpose: Sets up the use of the Scale-Offset filter. +! +! Inputs: +! plist_id - Dataset creation property list identifier. +! scale_type - Flag indicating compression method. +! scale_factor - Parameter related to scale. +! Outputs: +! hdferr - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! March 21, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE H5Pset_scaleoffset_f(plist_id, scale_type, scale_factor, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pset_scaleoffset_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: plist_id ! Dataset creation property list identifier + INTEGER, INTENT(IN) :: scale_type ! Flag indicating compression method. + INTEGER, INTENT(IN) :: scale_factor ! parameter related to scale. + INTEGER, INTENT(OUT) :: hdferr ! Error code + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION H5Pset_scaleoffset_c(plist_id, scale_type, scale_factor) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5PSET_SCALEOFFSET_C'::h5pset_scaleoffset_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: plist_id + INTEGER, INTENT(IN) :: scale_type + INTEGER, INTENT(IN) :: scale_factor + END FUNCTION H5Pset_scaleoffset_c + END INTERFACE + + hdferr = H5Pset_scaleoffset_c(plist_id, scale_type, scale_factor) + + END SUBROUTINE H5Pset_scaleoffset_f + +!---------------------------------------------------------------------- +! Name: h5pset_nlinks_f +! +! Purpose: Sets maximum number of soft or user-defined link traversals. +! +! Inputs: +! lapl_id - File access property list identifier +! nlinks - Maximum number of links to traverse +! +! Outputs: +! hdferr - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! March 24, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE h5pset_nlinks_f(lapl_id, nlinks, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pset_nlinks_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: lapl_id ! File access property list identifier + INTEGER(SIZE_T), INTENT(IN) :: nlinks ! Maximum number of links to traverse + INTEGER, INTENT(OUT) :: hdferr ! Error code + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5pset_nlinks_c(lapl_id, nlinks) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5PSET_NLINKS_C'::h5pset_nlinks_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: lapl_id + INTEGER(SIZE_T), INTENT(IN) :: nlinks + END FUNCTION h5pset_nlinks_c + END INTERFACE + + hdferr = h5pset_nlinks_c(lapl_id, nlinks) + + END SUBROUTINE h5pset_nlinks_f + +!---------------------------------------------------------------------- +! Name: h5pget_nlinks_f +! +! Purpose: Gets maximum number of soft or user-defined link traversals. +! +! Inputs: +! lapl_id - File access property list identifier +! nlinks - Maximum number of links to traverse +! +! Outputs: +! hdferr - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! March 24, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE h5pget_nlinks_f(lapl_id, nlinks, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pget_nlinks_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: lapl_id ! File access property list identifier + INTEGER(SIZE_T), INTENT(OUT) :: nlinks ! Maximum number of links to traverse + INTEGER, INTENT(OUT) :: hdferr ! Error code + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5pget_nlinks_c(lapl_id, nlinks) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5PGET_NLINKS_C'::h5pget_nlinks_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: lapl_id + INTEGER(SIZE_T), INTENT(OUT) :: nlinks + END FUNCTION h5pget_nlinks_c + END INTERFACE + + hdferr = h5pget_nlinks_c(lapl_id, nlinks) + + END SUBROUTINE h5pget_nlinks_f + +!---------------------------------------------------------------------- +! Name: H5Pget_create_inter_group_f +! +! Purpose: Determines whether property is set to enable creating missing intermediate groups. +! +! Inputs: +! lcpl_id - Link creation property list identifier +! crt_intermed_group - Specifying whether to create intermediate groups upon +! the creation of an object +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! April 4, 2008 +! +! Modifications: +! +! Comment: The long subroutine name (>31) on older f90 compilers causes problems +! so had to shorten the name +!-------------------------------------------------------------------------------------- + + SUBROUTINE h5pget_create_inter_group_f(lcpl_id, crt_intermed_group, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5pget_create_inter_group_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: lcpl_id ! Link creation property list identifier + INTEGER, INTENT(IN) :: crt_intermed_group ! Flag specifying whether to create intermediate groups + ! upon creation of an object + INTEGER, INTENT(OUT) :: hdferr ! Error code + + INTERFACE + INTEGER FUNCTION h5pget_create_inter_group_c(lcpl_id, crt_intermed_group) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5PGET_CREATE_INTER_GROUP_C'::h5pget_create_inter_group_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: lcpl_id + INTEGER, INTENT(IN) :: crt_intermed_group + END FUNCTION h5pget_create_inter_group_c + END INTERFACE + + hdferr = h5pget_create_inter_group_c(lcpl_id, crt_intermed_group) + + END SUBROUTINE h5pget_create_inter_group_f + + +END MODULE H5P + diff --git a/fortran/src/H5Rf.c b/fortran/src/H5Rf.c index 4430e1a..299f6bd 100644 --- a/fortran/src/H5Rf.c +++ b/fortran/src/H5Rf.c @@ -239,3 +239,102 @@ nh5rget_object_type_obj_c (hid_t_f *dset_id, haddr_t_f *ref, int_f *obj_type) return ret_value; } +/*---------------------------------------------------------------------------- + * Name: h5rget_name_object_c + * Purpose: Call H5Rget_name for an object + * Inputs: + * loc_id - Identifier for the dataset containing the reference or for the group that dataset is in. + * ref - An object or dataset region reference. + * + * Outputs: name - A name associated with the referenced object or dataset region. + * size - The size of the name buffer. + * + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * March 31, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5rget_name_object_c (hid_t_f *loc_id, haddr_t_f *ref, _fcd name, size_t_f *name_len, size_t_f *size_default) +{ + hobj_ref_t ref_c; + int_f ret_value = -1; + ssize_t c_size; + size_t c_bufsize; + char *c_buf= NULL; /* Buffer to hold C string */ + + ref_c = *ref; + + c_bufsize = (size_t)*name_len+1; + /* + * Allocate buffer to hold name of an attribute + */ + if ((c_buf = HDmalloc(c_bufsize)) == NULL) + return ret_value; + + /* + * Call H5Rget_name function. + */ + if((c_size=H5Rget_name((hid_t)*loc_id, H5R_OBJECT, &ref_c, c_buf, c_bufsize)) < 0) + return ret_value; + /* + * Convert C name to FORTRAN and place it in the given buffer + */ + HD5packFstring(c_buf, _fcdtocp(name), c_bufsize-1); + + *size_default = (size_t_f)c_size; + ret_value = 0; + if(c_buf) HDfree(c_buf); + + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5rget_name_region_c + * Purpose: Call H5Rget_name for a dataset region + * Inputs: + * loc_id - Identifier for the dataset containing the reference or for the group that dataset is in. + * ref - An object or dataset region reference. + * + * Outputs: name - A name associated with the referenced object or dataset region. + * size - The size of the name buffer. + * + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * March 31, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5rget_name_region_c (hid_t_f *loc_id, int_f *ref, _fcd name, size_t_f *name_len, size_t_f *size_default) +{ + hdset_reg_ref_t ref_c; + int_f ret_value = -1; + ssize_t c_size; + size_t c_bufsize; + char *c_buf= NULL; /* Buffer to hold C string */ + + HDmemcpy (&ref_c, ref, H5R_DSET_REG_REF_BUF_SIZE); + + c_bufsize = (size_t)*name_len+1; + /* + * Allocate buffer to hold name of an attribute + */ + if ((c_buf = HDmalloc(c_bufsize)) == NULL) + return ret_value; + + /* + * Call H5Rget_name function. + */ + if((c_size=H5Rget_name((hid_t)*loc_id, H5R_DATASET_REGION, &ref_c, c_buf, c_bufsize)) < 0) + return ret_value; + /* + * Convert C name to FORTRAN and place it in the given buffer + */ + HD5packFstring(c_buf, _fcdtocp(name), c_bufsize-1); + + *size_default = (size_t_f)c_size; + ret_value = 0; + if(c_buf) HDfree(c_buf); + + return ret_value; +} diff --git a/fortran/src/H5Rff.f90 b/fortran/src/H5Rff.f90 index 6400f43..a4f4a65 100644 --- a/fortran/src/H5Rff.f90 +++ b/fortran/src/H5Rff.f90 @@ -58,6 +58,12 @@ END INTERFACE + INTERFACE h5rget_name_f + + MODULE PROCEDURE h5rget_name_object_f + MODULE PROCEDURE h5rget_name_region_f + + END INTERFACE CONTAINS @@ -243,7 +249,6 @@ INTEGER(HID_T), INTENT(OUT) :: obj_id ! Object identifier INTEGER, INTENT(OUT) :: hdferr ! Error code - INTEGER :: ref_type ! Reference type INTEGER(HADDR_T) :: ref_f ! Local buffer to pass reference ! INTEGER, EXTERNAL :: h5h5rdereference_object_c @@ -309,7 +314,6 @@ INTEGER(HID_T), INTENT(OUT) :: obj_id ! Dataspace identifier INTEGER, INTENT(OUT) :: hdferr ! Error code - INTEGER :: ref_type ! Reference type INTEGER :: ref_f(REF_REG_BUF_LEN) ! Local buffer to pass reference ! INTEGER, EXTERNAL :: h5rdereference_region_c @@ -328,7 +332,6 @@ END FUNCTION h5rdereference_region_c END INTERFACE - ref_type = H5R_DATASET_REGION_F ref_f = ref%ref hdferr = h5rdereference_region_c(dset_id, ref_f, obj_id ) @@ -475,4 +478,146 @@ END SUBROUTINE h5rget_object_type_obj_f - END MODULE H5R +!---------------------------------------------------------------------- +! Name: h5rget_name_object_f +! +! Purpose: Retrieves a name of a referenced object. +! +! Inputs: +! loc_id - Identifier for the dataset containing the reference or for the group that dataset is in. +! ref - An object or dataset region reference. +! +! Outputs: +! name - A name associated with the referenced object or dataset region. +! +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! size - The size of the name buffer. +! +! Programmer: M.S. Breitenfeld +! March 28, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + + SUBROUTINE h5rget_name_object_f(loc_id, ref, name, hdferr, size) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5rget_name_object_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id ! Identifier for the dataset containing the reference + ! or for the group that dataset is in. + TYPE(hobj_ref_t_f), INTENT(IN) :: ref ! Object reference + INTEGER(SIZE_T), OPTIONAL, INTENT(OUT) :: size ! The size of the name buffer, + ! returning 0 (zero) if no name is associated with the identifier + CHARACTER(LEN=*), INTENT(OUT) :: name ! A name associated with the referenced object or dataset region. + INTEGER, INTENT(OUT) :: hdferr ! Error code + INTEGER(HADDR_T) :: ref_f ! Local buffer to pass reference + + INTEGER(SIZE_T) :: size_default + INTEGER(SIZE_T) :: name_len + + INTERFACE + INTEGER FUNCTION h5rget_name_object_c(loc_id, ref_f, name, name_len, size_default) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5RGET_NAME_OBJECT_C':: h5rget_name_object_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: loc_id + INTEGER(SIZE_T) :: size_default + CHARACTER(LEN=*), INTENT(OUT) :: name + INTEGER(HADDR_T) :: ref_f + + INTEGER(SIZE_T) :: name_len + END FUNCTION h5rget_name_object_c + END INTERFACE + + name_len=LEN(name) + + ref_f = ref%ref + hdferr = h5rget_name_object_c(loc_id, ref_f, name, name_len, size_default) + + IF(PRESENT(size)) size = size_default + + END SUBROUTINE h5rget_name_object_f + +!---------------------------------------------------------------------- +! Name: h5rget_name_region_f +! +! Purpose: Retrieves a name of a dataset region. +! +! Inputs: +! loc_id - Identifier for the dataset containing the reference or for the group that dataset is in. +! ref - An object or dataset region reference. +! +! Outputs: +! name - A name associated with the referenced object or dataset region. +! +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! size - The size of the name buffer. +! +! Programmer: M.S. Breitenfeld +! March 28, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + + SUBROUTINE h5rget_name_region_f(loc_id, ref, name, hdferr, size) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5rget_name_region_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id ! Identifier for the dataset containing the reference + ! or for the group that dataset is in. + TYPE(hdset_reg_ref_t_f), INTENT(IN) :: ref ! Object reference + INTEGER(SIZE_T), OPTIONAL, INTENT(OUT) :: size ! The size of the name buffer, + ! returning 0 (zero) if no name is associated with the identifier + CHARACTER(LEN=*), INTENT(OUT) :: name ! A name associated with the referenced object or dataset region. + INTEGER, INTENT(OUT) :: hdferr ! Error code + + INTEGER :: ref_f(REF_REG_BUF_LEN) ! Local buffer to pass reference + INTEGER(SIZE_T) :: size_default + INTEGER(SIZE_T) :: name_len + + INTERFACE + INTEGER FUNCTION h5rget_name_region_c(loc_id, ref_f, name, name_len, size_default) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5RGET_NAME_REGION_C':: h5rget_name_region_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: loc_id + INTEGER(SIZE_T) :: size_default + CHARACTER(LEN=*), INTENT(OUT) :: name + INTEGER :: ref_f(REF_REG_BUF_LEN) + + INTEGER(SIZE_T) :: name_len + END FUNCTION h5rget_name_region_c + END INTERFACE + + name_len=LEN(name) + + ref_f = ref%ref + hdferr = h5rget_name_region_c(loc_id, ref_f, name, name_len, size_default) + + IF(PRESENT(size)) size = size_default + + END SUBROUTINE h5rget_name_region_f + +END MODULE H5R diff --git a/fortran/src/H5Sf.c b/fortran/src/H5Sf.c index 0a4bd40..4c8f799 100644 --- a/fortran/src/H5Sf.c +++ b/fortran/src/H5Sf.c @@ -1027,3 +1027,127 @@ nh5sselect_elements_c ( hid_t_f *space_id , int_f *op, size_t_f *nelements, hsi return ret_value; } +/*---------------------------------------------------------------------------- + * Name: h5sdecode_c + * Purpose: Call H5Sdecode + * Inputs: + * buf - Buffer for the data space object to be decoded. + * Outputs: + * obj_id - Object_id (non-negative) + * + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * March 26, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ + +int_f +nh5sdecode_c ( _fcd buf, hid_t_f *obj_id ) +{ + int ret_value = -1; + unsigned char *c_buf = NULL; /* Buffer to hold C string */ + hid_t c_obj_id; + + /* + * Call H5Sdecode function. + */ + + c_buf = (unsigned char*)buf; + + c_obj_id = H5Sdecode(c_buf); + if(c_obj_id < 0) + return ret_value; + + *obj_id = (hid_t_f)c_obj_id; + ret_value = 0; + + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5sencode_c + * Purpose: Call H5Sencode + * Inputs: + * obj_id - Identifier of the object to be encoded. + * buf - Buffer for the object to be encoded into. + * nalloc - The size of the allocated buffer. + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * March 26, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ + +int_f +nh5sencode_c (_fcd buf, hid_t_f *obj_id, size_t_f *nalloc ) +{ + int ret_value = -1; + unsigned char *c_buf = NULL; /* Buffer to hold C string */ + size_t c_size; + + /* return just the size of the allocated buffer; + * equivalent to C routine for which 'name' is set equal to NULL + */ + + if (*nalloc == 0) { + + if(H5Sencode((hid_t)*obj_id, c_buf, &c_size) < 0) + return ret_value; + + *nalloc = (size_t_f)c_size; + + ret_value = 0; + return ret_value; + } + + c_size = (size_t)*nalloc; + /* + * Allocate buffer + */ + if ((c_buf = HDmalloc(c_size)) == NULL) + return ret_value; + /* + * Call H5Sencode function. + */ + if(H5Sencode((hid_t)*obj_id, c_buf, &c_size) < 0){ + return ret_value; + } + + /* copy the C buffer to the FORTRAN buffer. + * Can not use HD5packFstring because we don't want to + * eliminate the NUL terminator or pad remaining space + * with blanks. + */ + + HDmemcpy(_fcdtocp(buf),(char *)c_buf,c_size); + + ret_value = 0; + if(c_buf) HDfree(c_buf); + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5sextent_equal_c + * Purpose: Call H5Sextent_equal + * Inputs: + * space1_id - First dataspace identifier. + * space2_id - Second dataspace identifier. + * Outputs: + * equal - TRUE if equal, FALSE if unequal. + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * April 4, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ + +int_f +nh5sextent_equal_c ( hid_t_f * space1_id, hid_t_f *space2_id, hid_t_f *c_equal) +{ + int ret_value = -1; + + if( (*c_equal = (hid_t_f)H5Sextent_equal((hid_t)*space1_id, (hid_t)*space2_id)) < 0) + return ret_value; + + ret_value = 0; + return ret_value; +} + diff --git a/fortran/src/H5Sff.f90 b/fortran/src/H5Sff.f90 index a4780c1..c212d9a 100644 --- a/fortran/src/H5Sff.f90 +++ b/fortran/src/H5Sff.f90 @@ -1942,4 +1942,170 @@ END SUBROUTINE h5sget_select_type_f - END MODULE H5S +!---------------------------------------------------------------------- +! Name: H5Sdecode_f +! +! Purpose: Decode a binary object description of data space and return a new object handle. +! +! Inputs: +! buf - Buffer for the data space object to be decoded. +! obj_id - Object ID +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! +! Optional parameters: - NONE +! +! Programmer: M.S. Breitenfeld +! March 26, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE h5sdecode_f(buf, obj_id, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5sdecode_f +!DEC$endif +! + IMPLICIT NONE + CHARACTER(LEN=*), INTENT(IN) :: buf ! Buffer for the data space object to be decoded. + INTEGER(HID_T), INTENT(OUT) :: obj_id ! Object ID + INTEGER, INTENT(OUT) :: hdferr ! Error code + + INTERFACE + INTEGER FUNCTION h5sdecode_c(buf, obj_id) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5SDECODE_C'::h5sdecode_c + !DEC$ ENDIF + CHARACTER(LEN=*), INTENT(IN) :: buf + INTEGER(HID_T), INTENT(OUT) :: obj_id ! Object ID + END FUNCTION h5sdecode_c + END INTERFACE + + hdferr = h5sdecode_c(buf, obj_id) + + END SUBROUTINE h5sdecode_f + +!---------------------------------------------------------------------- +! Name: H5Sencode_f +! +! Purpose: Encode a data space object description into a binary buffer. +! +! Inputs: +! obj_id - Identifier of the object to be encoded. +! buf - Buffer for the object to be encoded into. +! nalloc - The size of the allocated buffer. +! Outputs: +! nalloc - The size of the buffer needed. +! hdferr: - error code +! Success: 0 +! Failure: -1 +! +! Optional parameters: - NONE +! +! Programmer: M.S. Breitenfeld +! March 26, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE h5sencode_f(obj_id, buf, nalloc, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5sencode_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: obj_id ! Identifier of the object to be encoded. + CHARACTER(LEN=*), INTENT(OUT) :: buf ! Buffer for the object to be encoded into. + INTEGER(SIZE_T), INTENT(INOUT) :: nalloc ! The size of the allocated buffer. + INTEGER, INTENT(OUT) :: hdferr ! Error code + + + INTERFACE + INTEGER FUNCTION h5sencode_c(buf, obj_id, nalloc) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5SENCODE_C'::h5sencode_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: obj_id + CHARACTER(LEN=*), INTENT(OUT) :: buf + INTEGER(SIZE_T), INTENT(INOUT) :: nalloc + END FUNCTION h5sencode_c + END INTERFACE + + hdferr = h5sencode_c(buf, obj_id, nalloc) + + END SUBROUTINE h5sencode_f + + +!---------------------------------------------------------------------- +! Name: h5sextent_equal_f +! +! Purpose: Determines whether two dataspace extents are equal. +! +! Inputs: +! space1_id - First dataspace identifier. +! space2_id - Second dataspace identifier. +! Outputs: +! Equal - .TRUE. if equal, .FALSE. if unequal. +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! April 2, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE h5sextent_equal_f(space1_id, space2_id, equal, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5sextent_equal_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: space1_id ! First dataspace identifier. + INTEGER(HID_T), INTENT(IN) :: space2_id ! Second dataspace identifier. + LOGICAL, INTENT(OUT) :: Equal ! .TRUE. if equal, .FALSE. if unequal. + INTEGER, INTENT(OUT) :: hdferr ! Error code + + INTEGER(HID_T) :: c_equal + + INTERFACE + INTEGER FUNCTION h5sextent_equal_c(space1_id, space2_id, c_equal) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5SEXTENT_EQUAL_C'::h5sextent_equal_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: space1_id + INTEGER(HID_T), INTENT(IN) :: space2_id + INTEGER(HID_T) :: c_equal + END FUNCTION h5sextent_equal_c + END INTERFACE + + hdferr = h5sextent_equal_c(space1_id, space2_id, c_equal) + + + equal = .FALSE. + IF(c_equal.GT.0) equal = .TRUE. + + + END SUBROUTINE h5sextent_equal_f + +END MODULE H5S diff --git a/fortran/src/H5Tf.c b/fortran/src/H5Tf.c index 7c3befc..633389b 100644 --- a/fortran/src/H5Tf.c +++ b/fortran/src/H5Tf.c @@ -24,6 +24,7 @@ * Inputs: loc_id - file or group identifier * name - name of the datatype within file or group * namelen - name length + * tapl_id - datatype access property list identifier * Outputs: type_id - dataset identifier * Returns: 0 on success, -1 on failure * Programmer: Elena Pourmal @@ -31,7 +32,7 @@ * Modifications: *---------------------------------------------------------------------------*/ int_f -nh5topen_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *type_id) +nh5topen_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *type_id, hid_t_f *tapl_id) { char *c_name = NULL; hid_t c_type_id; @@ -46,7 +47,7 @@ nh5topen_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *type_id) /* * Call H5Topen2 function. */ - if((c_type_id = H5Topen2((hid_t)*loc_id, c_name, H5P_DEFAULT)) < 0) + if((c_type_id = H5Topen2((hid_t)*loc_id, c_name, (hid_t)*tapl_id)) < 0) goto done; *type_id = (hid_t_f)c_type_id; @@ -67,13 +68,19 @@ done: * name - name of the datatype within file or group * namelen - name length * type_id - dataset identifier + * lcpl_id - Link creation property list + * tcpl_id - Datatype creation property list + * tapl_id - Datatype access property list * Returns: 0 on success, -1 on failure * Programmer: Elena Pourmal * Saturday, August 14, 1999 * Modifications: + * - Added passing optional parameters for version 1.8 + * M.S. Breitenfeld *---------------------------------------------------------------------------*/ int_f -nh5tcommit_c(hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *type_id) +nh5tcommit_c(hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *type_id, + hid_t_f *lcpl_id, hid_t_f *tcpl_id, hid_t_f *tapl_id) { char *c_name = NULL; int ret_value = -1; @@ -83,7 +90,7 @@ nh5tcommit_c(hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *type_id) goto done; /* Call H5Tcommit2 function */ - if(H5Tcommit2((hid_t)*loc_id, c_name, (hid_t)*type_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT) < 0) + if(H5Tcommit2((hid_t)*loc_id, c_name, (hid_t)*type_id, (hid_t)*lcpl_id, (hid_t)*tcpl_id, (hid_t)*tapl_id) < 0) goto done; ret_value = 0; @@ -1634,3 +1641,202 @@ nh5tget_member_class_c ( hid_t_f *type_id , int_f *member_no, int_f *class ) *class = (int_f)c_class; return ret_value; } + +/*---------------------------------------------------------------------------- + * Name: h5tcommit_anon_c + * Purpose: Call H5Tcommit_anon + * Inputs: loc_id - file or group identifier + * dtype_id - dataset identifier + * tcpl_id - Datatype creation property list + * tapl_id - Datatype access property list + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * February 25, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5tcommit_anon_c(hid_t_f *loc_id, hid_t_f *dtype_id, + hid_t_f *tcpl_id, hid_t_f *tapl_id) +{ + int ret_value = -1; + + /* Call H5Tcommit_anon function */ + if(H5Tcommit_anon((hid_t)*loc_id, (hid_t)*dtype_id, (hid_t)*tcpl_id, (hid_t)*tapl_id) < 0) + goto done; + + ret_value = 0; + + done: + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5tcommitted_c + * Purpose: Call H5Tcommitted + * dtype_id - dataset identifier + * Returns: a positive value, for TRUE, if the datatype has been committed, + * or 0 (zero), for FALSE, if the datatype has not been committed. + * Otherwise returns a negative value. + * Programmer: M.S. Breitenfeld + * February 25, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ +int_f +nh5tcommitted_c(hid_t_f *dtype_id) +{ + int_f ret_value; + + /* Call H5Tcommitted function */ + + ret_value=(int_f)H5Tcommitted((hid_t)*dtype_id); + + return ret_value; + +} + +/*---------------------------------------------------------------------------- + * Name: h5tdecode_c + * Purpose: Call H5Tdecode + * Inputs: + * buf - Buffer for the data space object to be decoded. + * Outputs: + * obj_id - Object_id (non-negative) + * + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * April 9, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ + +int_f +nh5tdecode_c ( _fcd buf, hid_t_f *obj_id ) +{ + int ret_value = -1; + unsigned char *c_buf = NULL; /* Buffer to hold C string */ + hid_t c_obj_id; + + /* + * Call H5Tdecode function. + */ + + c_buf = (unsigned char*)buf; + + c_obj_id = H5Tdecode(c_buf); + if(c_obj_id < 0) + return ret_value; + + *obj_id = (hid_t_f)c_obj_id; + ret_value = 0; + + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5tencode_c + * Purpose: Call H5Tencode + * Inputs: + * obj_id - Identifier of the object to be encoded. + * buf - Buffer for the object to be encoded into. + * nalloc - The size of the allocated buffer. + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * April 9, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ + +int_f +nh5tencode_c (_fcd buf, hid_t_f *obj_id, size_t_f *nalloc ) +{ + int ret_value = -1; + unsigned char *c_buf = NULL; /* Buffer to hold C string */ + size_t c_size; + + /* return just the size of the allocated buffer; + * equivalent to C routine for which 'name' is set equal to NULL + */ + + if (*nalloc == 0) { + + if(H5Tencode((hid_t)*obj_id, c_buf, &c_size) < 0) + return ret_value; + + *nalloc = (size_t_f)c_size; + + ret_value = 0; + return ret_value; + } + + c_size = (size_t)*nalloc; + /* + * Allocate buffer + */ + if ((c_buf = HDmalloc(c_size)) == NULL) + return ret_value; + /* + * Call H5Tencode function. + */ + if(H5Tencode((hid_t)*obj_id, c_buf, &c_size) < 0){ + return ret_value; + } + + /* copy the C buffer to the FORTRAN buffer. + * Can not use HD5packFstring because we don't want to + * eliminate the NUL terminator or pad remaining space + * with blanks. + */ + + HDmemcpy(_fcdtocp(buf),(char *)c_buf,c_size); + + ret_value = 0; + if(c_buf) HDfree(c_buf); + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5tget_create_plist_c + * Purpose: Call H5Tget_create_plist + * Inputs: dtype_id - Datatype identifier + * Outputs: dtpl_id - Datatype property list identifier + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * April 9, 2008 + * Modifications: N/A + *---------------------------------------------------------------------------*/ + +int_f +nh5tget_create_plist_c ( hid_t_f *dtype_id, hid_t_f *dtpl_id) +{ + int_f ret_value=-1; /* Return value */ + + if ((*dtpl_id = (hid_t_f)H5Tget_create_plist((hid_t)*dtype_id)) < 0) + return ret_value; + + ret_value = 0; + return ret_value; +} + +/*---------------------------------------------------------------------------- + * Name: h5tcompiler_conv_c + * Purpose: Call H5Tcompiler_conv + * Inputs: + * src_id - Identifier for the source datatype. + * dst_id - Identifier for the destination datatype. + * Outputs: c_flag - flag; TRUE for compiler conversion, FALSE for library conversion + * Returns: 0 on success, -1 on failure + * Programmer: M.S. Breitenfeld + * April 9, 2008 + * Modifications: + *---------------------------------------------------------------------------*/ + +int_f +nh5tcompiler_conv_c ( hid_t_f *src_id, hid_t_f *dst_id, int_f *c_flag) +{ + int ret_value = -1; + htri_t status; + + status = H5Tcompiler_conv( (hid_t)*src_id , (hid_t)*dst_id); + if ( status < 0 ) return ret_value; + *c_flag = (int_f)status; + ret_value = 0; + return ret_value; +} diff --git a/fortran/src/H5Tff.f90 b/fortran/src/H5Tff.f90 index ee5bb77..c60e78b 100644 --- a/fortran/src/H5Tff.f90 +++ b/fortran/src/H5Tff.f90 @@ -16,11 +16,11 @@ ! ! This file contains FORTRAN90 interfaces for H5T functions ! - MODULE H5T +MODULE H5T - USE H5GLOBAL + USE H5GLOBAL - CONTAINS +CONTAINS !---------------------------------------------------------------------- ! Name: h5topen_f @@ -36,53 +36,62 @@ ! Success: 0 ! Failure: -1 ! Optional parameters: -! NONE +! tapl_id - datatype access property list identifier. ! ! Programmer: Elena Pourmal ! August 12, 1999 ! -! Modifications: Explicit Fortran interfaces were added for -! called C functions (it is needed for Windows -! port). March 7, 2001 +! Modifications: Explicit Fortran interfaces were added for +! called C functions (it is needed for Windows +! port). March 7, 2001 +! +! Added optional parameter 'tapl_id' for compatability +! with H5Topen2. April 9, 2009. ! ! Comment: !---------------------------------------------------------------------- - SUBROUTINE h5topen_f(loc_id, name, type_id, hdferr) + SUBROUTINE h5topen_f(loc_id, name, type_id, hdferr, tapl_id) ! !This definition is needed for Windows DLLs !DEC$if defined(BUILD_HDF5_DLL) !DEC$attributes dllexport :: h5topen_f !DEC$endif ! - IMPLICIT NONE - INTEGER(HID_T), INTENT(IN) :: loc_id ! File or group identifier - CHARACTER(LEN=*), INTENT(IN) :: name - ! Datatype name within file or group - INTEGER(HID_T), INTENT(OUT) :: type_id ! Datatype identifier - INTEGER, INTENT(OUT) :: hdferr ! Error code - INTEGER :: namelen ! Name length + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id ! File or group identifier + CHARACTER(LEN=*), INTENT(IN) :: name ! Datatype name within file or group + INTEGER(HID_T), INTENT(OUT) :: type_id ! Datatype identifier + INTEGER, INTENT(OUT) :: hdferr ! Error code + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: tapl_id ! datatype access property list identifier -! INTEGER, EXTERNAL :: h5topen_c + INTEGER :: namelen ! Name length + INTEGER(HID_T) :: tapl_id_default +! ! MS FORTRAN needs explicit interface for C functions called here. ! - INTERFACE - INTEGER FUNCTION h5topen_c(loc_id, name, namelen, type_id) - USE H5GLOBAL - !DEC$ IF DEFINED(HDF5F90_WINDOWS) - !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5TOPEN_C'::h5topen_c - !DEC$ ENDIF - !DEC$ATTRIBUTES reference ::name - INTEGER(HID_T), INTENT(IN) :: loc_id - CHARACTER(LEN=*), INTENT(IN) :: name - INTEGER :: namelen - INTEGER(HID_T), INTENT(OUT) :: type_id - END FUNCTION h5topen_c - END INTERFACE - - namelen = LEN(name) - hdferr = h5topen_c(loc_id, name, namelen, type_id) - END SUBROUTINE h5topen_f + INTERFACE + INTEGER FUNCTION h5topen_c(loc_id, name, namelen, type_id, tapl_id_default) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5TOPEN_C'::h5topen_c + !DEC$ ENDIF + !DEC$ATTRIBUTES reference ::name + INTEGER(HID_T), INTENT(IN) :: loc_id + CHARACTER(LEN=*), INTENT(IN) :: name + INTEGER :: namelen + INTEGER(HID_T), INTENT(OUT) :: type_id + INTEGER(HID_T) :: tapl_id_default + END FUNCTION h5topen_c + END INTERFACE + + namelen = LEN(name) + + tapl_id_default = H5P_DEFAULT_F + IF(PRESENT(tapl_id)) tapl_id_default = tapl_id + + hdferr = h5topen_c(loc_id, name, namelen, type_id, tapl_id_default) + END SUBROUTINE h5topen_f !---------------------------------------------------------------------- ! Name: h5tcommit_f @@ -100,53 +109,84 @@ ! Success: 0 ! Failure: -1 ! Optional parameters: -! NONE +! lcpl_id - Link creation property list +! tcpl_id - Datatype creation property list +! tapl_id - Datatype access property list ! ! Programmer: Elena Pourmal ! August 12, 1999 ! -! Modifications: Explicit Fortran interfaces were added for -! called C functions (it is needed for Windows -! port). March 7, 2001 +! Modifications: - Explicit Fortran interfaces were added for +! called C functions (it is needed for Windows +! port). March 7, 2001 +! +! - Added optional parameters introduced in version 1.8 +! M.S. Breitenfeld +! +! ! ! Comment: !---------------------------------------------------------------------- - SUBROUTINE h5tcommit_f(loc_id, name, type_id, hdferr) + SUBROUTINE h5tcommit_f(loc_id, name, type_id, hdferr, & + lcpl_id, tcpl_id, tapl_id ) ! !This definition is needed for Windows DLLs !DEC$if defined(BUILD_HDF5_DLL) !DEC$attributes dllexport :: h5tcommit_f !DEC$endif ! - IMPLICIT NONE - INTEGER(HID_T), INTENT(IN) :: loc_id ! File or group identifier - CHARACTER(LEN=*), INTENT(IN) :: name + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id ! File or group identifier + CHARACTER(LEN=*), INTENT(IN) :: name ! Datatype name within file or group - INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier - INTEGER, INTENT(OUT) :: hdferr ! Error code - INTEGER :: namelen ! Name length + INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier + INTEGER, INTENT(OUT) :: hdferr ! Error code + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lcpl_id ! Link creation property list + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: tcpl_id ! Datatype creation property list + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: tapl_id ! Datatype access property list + + + INTEGER :: namelen ! Name length + + INTEGER(HID_T) :: lcpl_id_default + INTEGER(HID_T) :: tcpl_id_default + INTEGER(HID_T) :: tapl_id_default -! INTEGER, EXTERNAL :: h5tcommit_c ! MS FORTRAN needs explicit interface for C functions called here. ! - INTERFACE - INTEGER FUNCTION h5tcommit_c(loc_id, name, namelen, type_id) - USE H5GLOBAL - !DEC$ IF DEFINED(HDF5F90_WINDOWS) - !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5TCOMMIT_C'::h5tcommit_c - !DEC$ ENDIF - !DEC$ATTRIBUTES reference ::name - INTEGER(HID_T), INTENT(IN) :: loc_id - CHARACTER(LEN=*), INTENT(IN) :: name - INTEGER :: namelen - INTEGER(HID_T), INTENT(IN) :: type_id - END FUNCTION h5tcommit_c - END INTERFACE - - namelen = LEN(name) - hdferr = h5tcommit_c(loc_id, name, namelen, type_id) - END SUBROUTINE h5tcommit_f + INTERFACE + INTEGER FUNCTION h5tcommit_c(loc_id, name, namelen, type_id, & + lcpl_id_default, tcpl_id_default, tapl_id_default ) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5TCOMMIT_C'::h5tcommit_c + !DEC$ ENDIF + !DEC$ATTRIBUTES reference ::name + INTEGER(HID_T), INTENT(IN) :: loc_id + CHARACTER(LEN=*), INTENT(IN) :: name + INTEGER :: namelen + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(HID_T) :: lcpl_id_default + INTEGER(HID_T) :: tcpl_id_default + INTEGER(HID_T) :: tapl_id_default + END FUNCTION h5tcommit_c + END INTERFACE + + lcpl_id_default = H5P_DEFAULT_F + tcpl_id_default = H5P_DEFAULT_F + tapl_id_default = H5P_DEFAULT_F + + IF (PRESENT(lcpl_id)) lcpl_id_default = lcpl_id + IF (PRESENT(tcpl_id)) tcpl_id_default = tcpl_id + IF (PRESENT(tapl_id)) tapl_id_default = tapl_id + + namelen = LEN(name) + + hdferr = h5tcommit_c(loc_id, name, namelen, type_id, & + lcpl_id_default, tcpl_id_default, tapl_id_default ) + + END SUBROUTINE h5tcommit_f !---------------------------------------------------------------------- ! Name: h5tcopy_f @@ -3249,4 +3289,357 @@ END SUBROUTINE h5tget_member_class_f !---------------------------------------------------------------------- - END MODULE H5T +! Name: h5tcommit_anon_f +! +! Purpose: Commits a transient datatype to a file, +! creating a new named datatype, +! but does not link it into the file structure. +! +! Inputs: +! loc_id - A file or group identifier specifying the file +! in which the new named datatype is to be created. +! dtype_id - A datatype identifier. +! +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! tcpl_id - A datatype creation property list identifier. +! (H5P_DEFAULT_F for the default property list.) +! tapl_id - A datatype access property list identifier. +! should always be passed as the value H5P_DEFAULT_F. +! +! Programmer: M.S. Breitenfeld +! February 25, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE h5tcommit_anon_f(loc_id, dtype_id, hdferr, tcpl_id, tapl_id) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5tcommit_anon_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id ! A file or group identifier specifying + ! the file in which the new named datatype + ! is to be created. + INTEGER(HID_T), INTENT(IN) :: dtype_id ! Datatype identifier + INTEGER, INTENT(OUT) :: hdferr ! Error code + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: tcpl_id ! A datatype creation property + ! list identifier. + ! (H5P_DEFAULT_F for the default property list.) + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: tapl_id ! A datatype access property list identifier. + ! should always be passed as the value H5P_DEFAULT_F. + INTEGER(HID_T) :: tcpl_id_default + INTEGER(HID_T) :: tapl_id_default + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5tcommit_anon_c(loc_id, dtype_id, & + tcpl_id_default, tapl_id_default) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5TCOMMIT_ANON_C'::h5tcommit_anon_c + !DEC$ ENDIF + !DEC$ATTRIBUTES reference ::name + INTEGER(HID_T), INTENT(IN) :: loc_id + INTEGER(HID_T), INTENT(IN) :: dtype_id + INTEGER(HID_T) :: tcpl_id_default + INTEGER(HID_T) :: tapl_id_default + END FUNCTION h5tcommit_anon_c + END INTERFACE + + tcpl_id_default = H5P_DEFAULT_F + tapl_id_default = H5P_DEFAULT_F + + IF(PRESENT(tcpl_id)) tcpl_id_default = tcpl_id + IF(PRESENT(tapl_id)) tapl_id_default = tapl_id + + hdferr = h5tcommit_anon_c(loc_id, dtype_id, & + tcpl_id_default, tapl_id_default ) + + END SUBROUTINE h5tcommit_anon_f + +!---------------------------------------------------------------------- +! Name: h5tcommitted_f +! +! Purpose: Determines whether a datatype is a named type or a transient type. +! +! Inputs: +! dtype_id - A datatype identifier. +! +! Outputs: +! committed - .TRUE., if the datatype has been committed +! .FALSE., if the datatype has not been committed. +! hdferr: - error code +! Success: 0 +! Failure: -1 +! Optional parameters: None +! +! Programmer: M.S. Breitenfeld +! February 25, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE h5tcommitted_f(dtype_id, committed, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5tcommitted_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: dtype_id ! A datatype identifier + LOGICAL, INTENT(OUT) :: committed ! .TRUE., if the datatype has been committed + !.FALSE., if the datatype has not been committed. + INTEGER, INTENT(OUT) :: hdferr ! Error code: +! Success: 0 +! Failure: -1 + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5tcommitted_c(dtype_id) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5TCOMMITTED_C'::h5tcommitted_c + !DEC$ ENDIF + !DEC$ATTRIBUTES reference ::name + INTEGER(HID_T), INTENT(IN) :: dtype_id + END FUNCTION h5tcommitted_c + END INTERFACE + + hdferr = h5tcommitted_c(dtype_id) + + IF(hdferr.GT.0)THEN + committed = .TRUE. + hdferr = 0 + ELSE IF(hdferr.EQ.0)THEN + committed = .FALSE. + hdferr = 0 + ELSE + hdferr = -1 + ENDIF + + + END SUBROUTINE h5tcommitted_f + +!---------------------------------------------------------------------- +! Name: H5Tdecode_f +! +! Purpose: Decode a binary object description of data type and return a new object handle. +! Inputs: +! buf - Buffer for the data space object to be decoded. +! obj_id - Object ID +! Outputs: +! hdferr: - error code +! Success: 0 +! Failure: -1 +! +! Optional parameters: - NONE +! +! Programmer: M.S. Breitenfeld +! April 9, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE h5tdecode_f(buf, obj_id, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5tdecode_f +!DEC$endif +! + IMPLICIT NONE + CHARACTER(LEN=*), INTENT(IN) :: buf ! Buffer for the data space object to be decoded. + INTEGER(HID_T), INTENT(OUT) :: obj_id ! Object ID + INTEGER, INTENT(OUT) :: hdferr ! Error code + + INTERFACE + INTEGER FUNCTION h5tdecode_c(buf, obj_id) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5TDECODE_C'::h5tdecode_c + !DEC$ ENDIF + CHARACTER(LEN=*), INTENT(IN) :: buf + INTEGER(HID_T), INTENT(OUT) :: obj_id ! Object ID + END FUNCTION h5tdecode_c + END INTERFACE + + hdferr = h5tdecode_c(buf, obj_id) + + END SUBROUTINE h5tdecode_f + +!---------------------------------------------------------------------- +! Name: H5Tencode_f +! +! Purpose: Encode a data type object description into a binary buffer. +! +! Inputs: +! obj_id - Identifier of the object to be encoded. +! buf - Buffer for the object to be encoded into. +! nalloc - The size of the allocated buffer. +! Outputs: +! nalloc - The size of the buffer needed. +! hdferr: - error code +! Success: 0 +! Failure: -1 +! +! Optional parameters: - NONE +! +! Programmer: M.S. Breitenfeld +! April 9, 2008 +! +! Modifications: +! +! Comment: +!---------------------------------------------------------------------- + + SUBROUTINE h5tencode_f(obj_id, buf, nalloc, hdferr) +! +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5tencode_f +!DEC$endif +! + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: obj_id ! Identifier of the object to be encoded. + CHARACTER(LEN=*), INTENT(OUT) :: buf ! Buffer for the object to be encoded into. + INTEGER(SIZE_T), INTENT(INOUT) :: nalloc ! The size of the allocated buffer. + INTEGER, INTENT(OUT) :: hdferr ! Error code + + + INTERFACE + INTEGER FUNCTION h5tencode_c(buf, obj_id, nalloc) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5TENCODE_C'::h5tencode_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: obj_id + CHARACTER(LEN=*), INTENT(OUT) :: buf + INTEGER(SIZE_T), INTENT(INOUT) :: nalloc + END FUNCTION h5tencode_c + END INTERFACE + + hdferr = h5tencode_c(buf, obj_id, nalloc) + + END SUBROUTINE h5tencode_f + +!---------------------------------------------------------------------- +! Name: h5tget_create_plist_f +! +! Purpose: Returns a copy of a datatype creation property list. +! +! Inputs: +! dtype_id - Datatype identifier +! Outputs: +! dtpl_id - Datatype property list identifier +! hdferr: - Error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! April 9, 2008 +! +! Modifications: N/A +! +!---------------------------------------------------------------------- + + SUBROUTINE h5tget_create_plist_f(dtype_id, dtpl_id, hdferr) +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5tget_create_plist_f +!DEC$endif + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: dtype_id ! Datatype identifier + INTEGER(HID_T), INTENT(OUT) :: dtpl_id ! Datatype property list identifier. + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! 0 on success and -1 on failure + +! MS FORTRAN needs explicit interface for C functions called here. +! + INTERFACE + INTEGER FUNCTION h5tget_create_plist_c(dtype_id, dtpl_id) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5TGET_CREATE_PLIST_C'::h5tget_create_plist_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: dtype_id + INTEGER(HID_T), INTENT(OUT) :: dtpl_id + END FUNCTION h5tget_create_plist_c + END INTERFACE + + hdferr = h5tget_create_plist_c(dtype_id, dtpl_id) + END SUBROUTINE h5tget_create_plist_f + +!---------------------------------------------------------------------- +! Name: h5tcompiler_conv_f +! +! Purpose: Check whether the library’s default conversion is hard conversion.R +! +! Inputs: +! src_id - Identifier for the source datatype. +! dst_id - Identifier for the destination datatype. +! Outputs: +! flag - TRUE for compiler conversion, FALSE for library conversion +! hdferr: - Error code +! Success: 0 +! Failure: -1 +! Optional parameters: +! NONE +! +! Programmer: M.S. Breitenfeld +! April 9, 2008 +! +! Modifications: N/A +! +!---------------------------------------------------------------------- + + SUBROUTINE h5tcompiler_conv_f( src_id, dst_id, flag, hdferr) +!This definition is needed for Windows DLLs +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$attributes dllexport :: h5tcompiler_conv_f +!DEC$endif + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: src_id ! Identifier for the source datatype. + INTEGER(HID_T), INTENT(IN) :: dst_id ! Identifier for the destination datatype. + LOGICAL, INTENT(OUT) :: flag ! .TRUE. for compiler conversion, .FALSE. for library conversion + INTEGER, INTENT(OUT) :: hdferr ! Error code: + ! 0 on success and -1 on failure + INTEGER :: c_flag + + INTERFACE + INTEGER FUNCTION h5tcompiler_conv_c(src_id, dst_id, c_flag) + USE H5GLOBAL + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5TCOMPILER_CONV_C'::h5tcompiler_conv_c + !DEC$ ENDIF + INTEGER(HID_T), INTENT(IN) :: src_id + INTEGER(HID_T), INTENT(IN) :: dst_id + INTEGER :: c_flag + END FUNCTION h5tcompiler_conv_c + END INTERFACE + + hdferr = h5tcompiler_conv_c(src_id, dst_id, c_flag) + + flag = .FALSE. + IF(c_flag .GT. 0) flag = .TRUE. + + END SUBROUTINE h5tcompiler_conv_f + +END MODULE H5T diff --git a/fortran/src/H5_f.c b/fortran/src/H5_f.c index a9ac279..8df766c 100644 --- a/fortran/src/H5_f.c +++ b/fortran/src/H5_f.c @@ -203,6 +203,7 @@ nh5close_types_c( hid_t_f * types, int_f *lentypes, * h5g_flags - H5G interface flags * h5i_flags - H5I interface flags * h5p_flags - H5P interface flags + * h5p_flags_int - H5P intger interface flags * h5r_flags - H5R interface flags * h5s_flags - H5S interface flags * h5t_flags - H5T interface flags @@ -215,213 +216,316 @@ nh5close_types_c( hid_t_f * types, int_f *lentypes, * Added more FD flags and new H5LIB flags * Added more FD flags for HDF5 file driver * EIP, April 9, 2005 + * Added Generic flags introduced in version 1.8 + * MSB, January, 2008 + * Added types in lines h5*_flags = ( )variable to match input *---------------------------------------------------------------------------*/ int_f nh5init_flags_c( int_f *h5d_flags, int_f *h5f_flags, int_f *h5fd_flags, hid_t_f *h5fd_hid_flags, - int_f *h5g_flags, int_f *h5i_flags, - hid_t_f *h5p_flags, int_f *h5r_flags, int_f *h5s_flags, - int_f *h5t_flags, int_f *h5z_flags) + int_f *h5g_flags, int_f *h5i_flags, int_f *h5l_flags, int_f *h5o_flags, + hid_t_f *h5p_flags, int_f *h5p_flags_int, int_f *h5r_flags, int_f *h5s_flags, + int_f *h5t_flags, int_f *h5z_flags, int_f *h5_generic_flags) { int ret_value = -1; /* * H5D flags */ - h5d_flags[0] = H5D_COMPACT; - h5d_flags[1] = H5D_CONTIGUOUS; - h5d_flags[2] = H5D_CHUNKED; - h5d_flags[3] = H5D_ALLOC_TIME_ERROR; - h5d_flags[4] = H5D_ALLOC_TIME_DEFAULT; - h5d_flags[5] = H5D_ALLOC_TIME_EARLY; - h5d_flags[6] = H5D_ALLOC_TIME_LATE; - h5d_flags[7] = H5D_ALLOC_TIME_INCR; - h5d_flags[8] = H5D_SPACE_STATUS_ERROR; - h5d_flags[9] = H5D_SPACE_STATUS_NOT_ALLOCATED; - h5d_flags[10] = H5D_SPACE_STATUS_PART_ALLOCATED; - h5d_flags[11] = H5D_SPACE_STATUS_ALLOCATED; - h5d_flags[12] = H5D_FILL_TIME_ERROR; - h5d_flags[13] = H5D_FILL_TIME_ALLOC; - h5d_flags[14] = H5D_FILL_TIME_NEVER; - h5d_flags[15] = H5D_FILL_VALUE_ERROR; - h5d_flags[16] = H5D_FILL_VALUE_UNDEFINED; - h5d_flags[17] = H5D_FILL_VALUE_DEFAULT; - h5d_flags[18] = H5D_FILL_VALUE_USER_DEFINED; + h5d_flags[0] = (int_f)H5D_COMPACT; + h5d_flags[1] = (int_f)H5D_CONTIGUOUS; + h5d_flags[2] = (int_f)H5D_CHUNKED; + h5d_flags[3] = (int_f)H5D_ALLOC_TIME_ERROR; + h5d_flags[4] = (int_f)H5D_ALLOC_TIME_DEFAULT; + h5d_flags[5] = (int_f)H5D_ALLOC_TIME_EARLY; + h5d_flags[6] = (int_f)H5D_ALLOC_TIME_LATE; + h5d_flags[7] = (int_f)H5D_ALLOC_TIME_INCR; + h5d_flags[8] = (int_f)H5D_SPACE_STATUS_ERROR; + h5d_flags[9] = (int_f)H5D_SPACE_STATUS_NOT_ALLOCATED; + h5d_flags[10] = (int_f)H5D_SPACE_STATUS_PART_ALLOCATED; + h5d_flags[11] = (int_f)H5D_SPACE_STATUS_ALLOCATED; + h5d_flags[12] = (int_f)H5D_FILL_TIME_ERROR; + h5d_flags[13] = (int_f)H5D_FILL_TIME_ALLOC; + h5d_flags[14] = (int_f)H5D_FILL_TIME_NEVER; + h5d_flags[15] = (int_f)H5D_FILL_VALUE_ERROR; + h5d_flags[16] = (int_f)H5D_FILL_VALUE_UNDEFINED; + h5d_flags[17] = (int_f)H5D_FILL_VALUE_DEFAULT; + h5d_flags[18] = (int_f)H5D_FILL_VALUE_USER_DEFINED; /* * H5F flags */ - h5f_flags[0] = (int_f)H5F_ACC_RDWR; - h5f_flags[1] = (int_f)H5F_ACC_RDONLY; - h5f_flags[2] = (int_f)H5F_ACC_TRUNC; - h5f_flags[3] = (int_f)H5F_ACC_EXCL; - h5f_flags[4] = (int_f)H5F_ACC_DEBUG; - h5f_flags[5] = (int_f)H5F_SCOPE_LOCAL; - h5f_flags[6] = (int_f)H5F_SCOPE_GLOBAL; - h5f_flags[7] = (int_f)H5F_CLOSE_DEFAULT; - h5f_flags[8] = (int_f)H5F_CLOSE_WEAK; - h5f_flags[9] = (int_f)H5F_CLOSE_SEMI; - h5f_flags[10] = (int_f)H5F_CLOSE_STRONG; - h5f_flags[11] = (int_f)H5F_OBJ_FILE; - h5f_flags[12] = (int_f)H5F_OBJ_DATASET; - h5f_flags[13] = (int_f)H5F_OBJ_GROUP; - h5f_flags[14] = (int_f)H5F_OBJ_DATATYPE; - h5f_flags[15] = (int_f)H5F_OBJ_ALL; - + h5f_flags[0] = (int_f)H5F_ACC_RDWR; + h5f_flags[1] = (int_f)H5F_ACC_RDONLY; + h5f_flags[2] = (int_f)H5F_ACC_TRUNC; + h5f_flags[3] = (int_f)H5F_ACC_EXCL; + h5f_flags[4] = (int_f)H5F_ACC_DEBUG; + h5f_flags[5] = (int_f)H5F_SCOPE_LOCAL; + h5f_flags[6] = (int_f)H5F_SCOPE_GLOBAL; + h5f_flags[7] = (int_f)H5F_CLOSE_DEFAULT; + h5f_flags[8] = (int_f)H5F_CLOSE_WEAK; + h5f_flags[9] = (int_f)H5F_CLOSE_SEMI; + h5f_flags[10] = (int_f)H5F_CLOSE_STRONG; + h5f_flags[11] = (int_f)H5F_OBJ_FILE; + h5f_flags[12] = (int_f)H5F_OBJ_DATASET; + h5f_flags[13] = (int_f)H5F_OBJ_GROUP; + h5f_flags[14] = (int_f)H5F_OBJ_DATATYPE; + h5f_flags[15] = (int_f)H5F_OBJ_ALL; + h5f_flags[16] = (int_f)H5F_LIBVER_EARLIEST; + h5f_flags[17] = (int_f)H5F_LIBVER_LATEST; + /* * H5FD flags */ - h5fd_flags[0] = H5FD_MPIO_INDEPENDENT; - h5fd_flags[1] = H5FD_MPIO_COLLECTIVE; - h5fd_flags[2] = H5FD_MEM_NOLIST; - h5fd_flags[3] = H5FD_MEM_DEFAULT; - h5fd_flags[4] = H5FD_MEM_SUPER; - h5fd_flags[5] = H5FD_MEM_BTREE; - h5fd_flags[6] = H5FD_MEM_DRAW; - h5fd_flags[7] = H5FD_MEM_GHEAP; - h5fd_flags[8] = H5FD_MEM_LHEAP; - h5fd_flags[9] = H5FD_MEM_OHDR; - h5fd_flags[10] = H5FD_MEM_NTYPES; + h5fd_flags[0] = (int_f)H5FD_MPIO_INDEPENDENT; + h5fd_flags[1] = (int_f)H5FD_MPIO_COLLECTIVE; + h5fd_flags[2] = (int_f)H5FD_MEM_NOLIST; + h5fd_flags[3] = (int_f)H5FD_MEM_DEFAULT; + h5fd_flags[4] = (int_f)H5FD_MEM_SUPER; + h5fd_flags[5] = (int_f)H5FD_MEM_BTREE; + h5fd_flags[6] = (int_f)H5FD_MEM_DRAW; + h5fd_flags[7] = (int_f)H5FD_MEM_GHEAP; + h5fd_flags[8] = (int_f)H5FD_MEM_LHEAP; + h5fd_flags[9] = (int_f)H5FD_MEM_OHDR; + h5fd_flags[10] = (int_f)H5FD_MEM_NTYPES; /* * H5FD flags of type hid_t */ - h5fd_hid_flags[0] = H5FD_CORE; - h5fd_hid_flags[1] = H5FD_FAMILY; - h5fd_hid_flags[2] = H5FD_LOG; - h5fd_hid_flags[3] = H5FD_MPIO; - h5fd_hid_flags[4] = H5FD_MULTI; - h5fd_hid_flags[5] = H5FD_SEC2; - h5fd_hid_flags[6] = H5FD_STDIO; + h5fd_hid_flags[0] = (int_f)H5FD_CORE; + h5fd_hid_flags[1] = (int_f)H5FD_FAMILY; + h5fd_hid_flags[2] = (int_f)H5FD_LOG; + h5fd_hid_flags[3] = (int_f)H5FD_MPIO; + h5fd_hid_flags[4] = (int_f)H5FD_MULTI; + h5fd_hid_flags[5] = (int_f)H5FD_SEC2; + h5fd_hid_flags[6] = (int_f)H5FD_STDIO; /* * H5G flags */ - h5g_flags[0] = H5O_TYPE_UNKNOWN; - h5g_flags[1] = H5O_TYPE_GROUP; - h5g_flags[2] = H5O_TYPE_DATASET; - h5g_flags[3] = H5O_TYPE_NAMED_DATATYPE; + h5g_flags[0] = (int_f)H5O_TYPE_UNKNOWN; + h5g_flags[1] = (int_f)H5O_TYPE_GROUP; + h5g_flags[2] = (int_f)H5O_TYPE_DATASET; + h5g_flags[3] = (int_f)H5O_TYPE_NAMED_DATATYPE; /* This value can no longer be returned and all these flags should be updated * to reflect the refinements between links and objects. -QAK */ -/* h5g_flags[4] = H5G_LINK; */ - h5g_flags[5] = H5L_TYPE_ERROR; - h5g_flags[6] = H5L_TYPE_HARD; - h5g_flags[7] = H5L_TYPE_SOFT; +/* h5g_flags[4] = H5G_LINK; */ + h5g_flags[5] = (int_f)H5L_TYPE_ERROR; + h5g_flags[6] = (int_f)H5L_TYPE_HARD; + h5g_flags[7] = (int_f)H5L_TYPE_SOFT; + + h5g_flags[8] = (int_f)H5G_STORAGE_TYPE_UNKNOWN; + h5g_flags[9] = (int_f)H5G_STORAGE_TYPE_SYMBOL_TABLE; + h5g_flags[10] = (int_f)H5G_STORAGE_TYPE_COMPACT; + h5g_flags[11] = (int_f)H5G_STORAGE_TYPE_DENSE; /* * H5I flags */ - h5i_flags[0] = H5I_FILE; - h5i_flags[1] = H5I_GROUP; - h5i_flags[2] = H5I_DATATYPE; - h5i_flags[3] = H5I_DATASPACE; - h5i_flags[4] = H5I_DATASET; - h5i_flags[5] = H5I_ATTR; - h5i_flags[6] = H5I_BADID; + h5i_flags[0] = (int_f)H5I_FILE; + h5i_flags[1] = (int_f)H5I_GROUP; + h5i_flags[2] = (int_f)H5I_DATATYPE; + h5i_flags[3] = (int_f)H5I_DATASPACE; + h5i_flags[4] = (int_f)H5I_DATASET; + h5i_flags[5] = (int_f)H5I_ATTR; + h5i_flags[6] = (int_f)H5I_BADID; +/* + * H5L flags + */ + h5l_flags[0] = (int_f)H5L_TYPE_ERROR; + h5l_flags[1] = (int_f)H5L_TYPE_HARD; + h5l_flags[2] = (int_f)H5L_TYPE_SOFT; + h5l_flags[3] = (int_f)H5L_TYPE_EXTERNAL; + h5l_flags[4] = (int_f)H5L_SAME_LOC; /* Macro to indicate operation occurs on same location */ + h5l_flags[5] = (int_f)H5L_LINK_CLASS_T_VERS; /* Current version of the H5L_class_t struct */ + +/* + * H5O flags + */ + +/* Flags for object copy (H5Ocopy) */ + h5o_flags[0] = (int_f)H5O_COPY_SHALLOW_HIERARCHY_FLAG; /* Copy only immediate members */ + h5o_flags[1] = (int_f)H5O_COPY_EXPAND_SOFT_LINK_FLAG; /* Expand soft links into new objects */ + h5o_flags[2] = (int_f)H5O_COPY_EXPAND_EXT_LINK_FLAG; /* Expand external links into new objects */ + h5o_flags[3] = (int_f)H5O_COPY_EXPAND_REFERENCE_FLAG; /* Copy objects that are pointed by references */ + h5o_flags[4] = (int_f)H5O_COPY_WITHOUT_ATTR_FLAG; /* Copy object without copying attributes */ + h5o_flags[5] = (int_f)H5O_COPY_PRESERVE_NULL_FLAG; /* Copy NULL messages (empty space) */ + h5o_flags[6] = (int_f)H5O_COPY_ALL; /* All object copying flags (for internal checking) */ + +/* Flags for shared message indexes. + * Pass these flags in using the mesg_type_flags parameter in + * H5P_set_shared_mesg_index. + * (Developers: These flags correspond to object header message type IDs, + * but we need to assign each kind of message to a different bit so that + * one index can hold multiple types.) + */ + h5o_flags[7] = (int_f)H5O_SHMESG_NONE_FLAG; /* No shared messages */ + h5o_flags[8] = (int_f)H5O_SHMESG_SDSPACE_FLAG; /* Simple Dataspace Message. */ + h5o_flags[9] = (int_f)H5O_SHMESG_DTYPE_FLAG; /* Datatype Message. */ + h5o_flags[10] = (int_f)H5O_SHMESG_FILL_FLAG; /* Fill Value Message. */ + h5o_flags[11] = (int_f)H5O_SHMESG_PLINE_FLAG; /* Filter pipeline message. */ + h5o_flags[12] = (int_f)H5O_SHMESG_ATTR_FLAG; /* Attribute Message. */ + h5o_flags[13] = (int_f)H5O_SHMESG_ALL_FLAG; + +/* Object header status flag definitions */ + h5o_flags[14] = (int_f)H5O_HDR_CHUNK0_SIZE; /* 2-bit field indicating # of bytes to store the size of chunk 0's data */ + h5o_flags[15] = (int_f)H5O_HDR_ATTR_CRT_ORDER_TRACKED; /* Attribute creation order is tracked */ + h5o_flags[16] = (int_f)H5O_HDR_ATTR_CRT_ORDER_INDEXED; /* Attribute creation order has index */ + h5o_flags[17] = (int_f)H5O_HDR_ATTR_STORE_PHASE_CHANGE; /* Non-default attribute storage phase change values stored */ + h5o_flags[18] = (int_f)H5O_HDR_STORE_TIMES; /* Store access, modification, change & birth times for object */ + h5o_flags[19] = (int_f)H5O_HDR_ALL_FLAGS; + +/* Maximum shared message values. Number of indexes is 8 to allow room to add + * new types of messages. + */ + h5o_flags[20] = (int_f)H5O_SHMESG_MAX_NINDEXES; + h5o_flags[21] = (int_f)H5O_SHMESG_MAX_LIST_SIZE; /* * H5P flags */ - h5p_flags[0] = H5P_FILE_CREATE; - h5p_flags[1] = H5P_FILE_ACCESS; - h5p_flags[2] = H5P_DATASET_CREATE; - h5p_flags[3] = H5P_DATASET_XFER; - h5p_flags[4] = H5P_FILE_MOUNT; - h5p_flags[5] = H5P_DEFAULT; - h5p_flags[6] = H5P_ROOT; + h5p_flags[0] = (hid_t_f)H5P_FILE_CREATE; + h5p_flags[1] = (hid_t_f)H5P_FILE_ACCESS; + h5p_flags[2] = (hid_t_f)H5P_DATASET_CREATE; + h5p_flags[3] = (hid_t_f)H5P_DATASET_XFER; + h5p_flags[4] = (hid_t_f)H5P_FILE_MOUNT; + h5p_flags[5] = (hid_t_f)H5P_DEFAULT; + h5p_flags[6] = (hid_t_f)H5P_ROOT; + h5p_flags[7] = (hid_t_f)H5P_OBJECT_CREATE; + h5p_flags[8] = (hid_t_f)H5P_DATASET_ACCESS; + h5p_flags[9] = (hid_t_f)H5P_GROUP_CREATE; + h5p_flags[10] = (hid_t_f)H5P_GROUP_ACCESS; + h5p_flags[11] = (hid_t_f)H5P_DATATYPE_CREATE; + h5p_flags[12] = (hid_t_f)H5P_DATATYPE_ACCESS; + h5p_flags[13] = (hid_t_f)H5P_STRING_CREATE; + h5p_flags[14] = (hid_t_f)H5P_ATTRIBUTE_CREATE; + h5p_flags[15] = (hid_t_f)H5P_OBJECT_COPY; + h5p_flags[16] = (hid_t_f)H5P_LINK_CREATE; + h5p_flags[17] = (hid_t_f)H5P_LINK_ACCESS; + + +/* + * H5P integer flags + */ + h5p_flags_int[0] = (int_f)H5P_CRT_ORDER_INDEXED; + h5p_flags_int[1] = (int_f)H5P_CRT_ORDER_TRACKED; /* * H5R flags */ - h5r_flags[0] = H5R_OBJECT; - h5r_flags[1] = H5R_DATASET_REGION; + h5r_flags[0] = (int_f)H5R_OBJECT; + h5r_flags[1] = (int_f)H5R_DATASET_REGION; /* * H5S flags */ - h5s_flags[0] = H5S_SCALAR; - h5s_flags[1] = H5S_SIMPLE; - h5s_flags[2] = H5S_NULL; - h5s_flags[3] = H5S_SELECT_SET; - h5s_flags[4] = H5S_SELECT_OR; + h5s_flags[0] = (int_f)H5S_SCALAR; + h5s_flags[1] = (int_f)H5S_SIMPLE; + h5s_flags[2] = (int_f)H5S_NULL; + h5s_flags[3] = (int_f)H5S_SELECT_SET; + h5s_flags[4] = (int_f)H5S_SELECT_OR; h5s_flags[5] = (int_f)H5S_UNLIMITED; h5s_flags[6] = (int_f)H5S_ALL; - h5s_flags[7] = H5S_SELECT_NOOP; - h5s_flags[8] = H5S_SELECT_AND; - h5s_flags[9] = H5S_SELECT_XOR; - h5s_flags[10] = H5S_SELECT_NOTB; - h5s_flags[11] = H5S_SELECT_NOTA; - h5s_flags[12] = H5S_SELECT_APPEND; - h5s_flags[13] = H5S_SELECT_PREPEND; - h5s_flags[14] = H5S_SELECT_INVALID; + h5s_flags[7] = (int_f)H5S_SELECT_NOOP; + h5s_flags[8] = (int_f)H5S_SELECT_AND; + h5s_flags[9] = (int_f)H5S_SELECT_XOR; + h5s_flags[10] = (int_f)H5S_SELECT_NOTB; + h5s_flags[11] = (int_f)H5S_SELECT_NOTA; + h5s_flags[12] = (int_f)H5S_SELECT_APPEND; + h5s_flags[13] = (int_f)H5S_SELECT_PREPEND; + h5s_flags[14] = (int_f)H5S_SELECT_INVALID; - h5s_flags[15] = H5S_SEL_ERROR; - h5s_flags[16] = H5S_SEL_NONE; - h5s_flags[17] = H5S_SEL_POINTS; - h5s_flags[18] = H5S_SEL_HYPERSLABS; - h5s_flags[19] = H5S_SEL_ALL; + h5s_flags[15] = (int_f)H5S_SEL_ERROR; + h5s_flags[16] = (int_f)H5S_SEL_NONE; + h5s_flags[17] = (int_f)H5S_SEL_POINTS; + h5s_flags[18] = (int_f)H5S_SEL_HYPERSLABS; + h5s_flags[19] = (int_f)H5S_SEL_ALL; /* * H5T flags */ - h5t_flags[0] = H5T_NO_CLASS; - h5t_flags[1] = H5T_INTEGER; - h5t_flags[2] = H5T_FLOAT; - h5t_flags[3] = H5T_TIME; - h5t_flags[4] = H5T_STRING; - h5t_flags[5] = H5T_BITFIELD; - h5t_flags[6] = H5T_OPAQUE; - h5t_flags[7] = H5T_COMPOUND; - h5t_flags[8] = H5T_REFERENCE; - h5t_flags[9] = H5T_ENUM; - h5t_flags[10] = H5T_ORDER_LE; - h5t_flags[11] = H5T_ORDER_BE; - h5t_flags[12] = H5T_ORDER_VAX; - h5t_flags[13] = H5T_PAD_ZERO; - h5t_flags[14] = H5T_PAD_ONE; - h5t_flags[15] = H5T_PAD_BACKGROUND; - h5t_flags[16] = H5T_PAD_ERROR; - h5t_flags[17] = H5T_SGN_NONE; - h5t_flags[18] = H5T_SGN_2; - h5t_flags[19] = H5T_SGN_ERROR; - h5t_flags[20] = H5T_NORM_IMPLIED; - h5t_flags[21] = H5T_NORM_MSBSET; - h5t_flags[22] = H5T_NORM_NONE; - h5t_flags[23] = H5T_CSET_ASCII; - h5t_flags[24] = H5T_CSET_UTF8; - h5t_flags[25] = H5T_STR_NULLTERM; - h5t_flags[26] = H5T_STR_NULLPAD; - h5t_flags[27] = H5T_STR_SPACEPAD; - h5t_flags[28] = H5T_STR_ERROR; - h5t_flags[29] = H5T_VLEN; - h5t_flags[30] = H5T_ARRAY; + h5t_flags[0] = (int_f)H5T_NO_CLASS; + h5t_flags[1] = (int_f)H5T_INTEGER; + h5t_flags[2] = (int_f)H5T_FLOAT; + h5t_flags[3] = (int_f)H5T_TIME; + h5t_flags[4] = (int_f)H5T_STRING; + h5t_flags[5] = (int_f)H5T_BITFIELD; + h5t_flags[6] = (int_f)H5T_OPAQUE; + h5t_flags[7] = (int_f)H5T_COMPOUND; + h5t_flags[8] = (int_f)H5T_REFERENCE; + h5t_flags[9] = (int_f)H5T_ENUM; + h5t_flags[10] = (int_f)H5T_ORDER_LE; + h5t_flags[11] = (int_f)H5T_ORDER_BE; + h5t_flags[12] = (int_f)H5T_ORDER_VAX; + h5t_flags[13] = (int_f)H5T_PAD_ZERO; + h5t_flags[14] = (int_f)H5T_PAD_ONE; + h5t_flags[15] = (int_f)H5T_PAD_BACKGROUND; + h5t_flags[16] = (int_f)H5T_PAD_ERROR; + h5t_flags[17] = (int_f)H5T_SGN_NONE; + h5t_flags[18] = (int_f)H5T_SGN_2; + h5t_flags[19] = (int_f)H5T_SGN_ERROR; + h5t_flags[20] = (int_f)H5T_NORM_IMPLIED; + h5t_flags[21] = (int_f)H5T_NORM_MSBSET; + h5t_flags[22] = (int_f)H5T_NORM_NONE; + h5t_flags[23] = (int_f)H5T_CSET_ASCII; + h5t_flags[24] = (int_f)H5T_CSET_UTF8; + h5t_flags[25] = (int_f)H5T_STR_NULLTERM; + h5t_flags[26] = (int_f)H5T_STR_NULLPAD; + h5t_flags[27] = (int_f)H5T_STR_SPACEPAD; + h5t_flags[28] = (int_f)H5T_STR_ERROR; + h5t_flags[29] = (int_f)H5T_VLEN; + h5t_flags[30] = (int_f)H5T_ARRAY; /* * H5Z flags */ - h5z_flags[0] = H5Z_FILTER_ERROR; - h5z_flags[1] = H5Z_FILTER_NONE; - h5z_flags[2] = H5Z_FILTER_DEFLATE; - h5z_flags[3] = H5Z_FILTER_SHUFFLE; - h5z_flags[4] = H5Z_FILTER_FLETCHER32; - h5z_flags[5] = H5Z_ERROR_EDC; - h5z_flags[6] = H5Z_DISABLE_EDC; - h5z_flags[7] = H5Z_ENABLE_EDC; - h5z_flags[8] = H5Z_NO_EDC; - h5z_flags[9] = H5Z_FILTER_SZIP; - h5z_flags[10] = H5Z_FLAG_OPTIONAL; - h5z_flags[11] = H5Z_FILTER_CONFIG_ENCODE_ENABLED; - h5z_flags[12] = H5Z_FILTER_CONFIG_DECODE_ENABLED; - h5z_flags[13] = H5Z_FILTER_ALL; + h5z_flags[0] = (int_f)H5Z_FILTER_ERROR; + h5z_flags[1] = (int_f)H5Z_FILTER_NONE; + h5z_flags[2] = (int_f)H5Z_FILTER_DEFLATE; + h5z_flags[3] = (int_f)H5Z_FILTER_SHUFFLE; + h5z_flags[4] = (int_f)H5Z_FILTER_FLETCHER32; + h5z_flags[5] = (int_f)H5Z_ERROR_EDC; + h5z_flags[6] = (int_f)H5Z_DISABLE_EDC; + h5z_flags[7] = (int_f)H5Z_ENABLE_EDC; + h5z_flags[8] = (int_f)H5Z_NO_EDC; + h5z_flags[9] = (int_f)H5Z_FILTER_SZIP; + h5z_flags[10] = (int_f)H5Z_FLAG_OPTIONAL; + h5z_flags[11] = (int_f)H5Z_FILTER_CONFIG_ENCODE_ENABLED; + h5z_flags[12] = (int_f)H5Z_FILTER_CONFIG_DECODE_ENABLED; + h5z_flags[13] = (int_f)H5Z_FILTER_ALL; +/* + * H5A flags + */ + + +/* + * H5 Generic flags introduced in version 1.8 -MSB- + */ + + /* H5_index_t enum struct */ + + h5_generic_flags[0] = (int_f)H5_INDEX_UNKNOWN; /* Unknown index type */ + h5_generic_flags[1] = (int_f)H5_INDEX_NAME; /* Index on names */ + h5_generic_flags[2] = (int_f)H5_INDEX_CRT_ORDER; /* Index on creation order */ + h5_generic_flags[3] = (int_f)H5_INDEX_N; /* Index on creation order */ + + + /* H5_iter_order_t enum struct */ + + h5_generic_flags[4] = (int_f)H5_ITER_UNKNOWN; /* Unknown order */ + h5_generic_flags[5] = (int_f)H5_ITER_INC; /* Increasing order */ + h5_generic_flags[6] = (int_f)H5_ITER_DEC; /* Decreasing order */ + h5_generic_flags[7] = (int_f)H5_ITER_NATIVE; /* No particular order, whatever is fastest */ + h5_generic_flags[8] = (int_f)H5_ITER_N; /* Number of iteration orders */ ret_value = 0; return ret_value; diff --git a/fortran/src/H5_ff.f90 b/fortran/src/H5_ff.f90 index eeffa34..53bc113 100644 --- a/fortran/src/H5_ff.f90 +++ b/fortran/src/H5_ff.f90 @@ -13,8 +13,9 @@ ! access to either file, you may request a copy from help@hdfgroup.org. * ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! - MODULE H5LIB - CONTAINS +MODULE H5LIB + +CONTAINS !---------------------------------------------------------------------- ! Name: h5open_f ! @@ -37,18 +38,18 @@ ! ! Comment: !---------------------------------------------------------------------- - SUBROUTINE h5open_f(error) + SUBROUTINE h5open_f(error) ! !This definition is needed for Windows DLLs !DEC$if defined(BUILD_HDF5_DLL) !DEC$attributes dllexport :: h5open_f !DEC$endif ! - USE H5GLOBAL + USE H5GLOBAL - IMPLICIT NONE - INTEGER, INTENT(OUT) :: error - INTEGER :: error_0, error_1, error_2, error_3 + IMPLICIT NONE + INTEGER, INTENT(OUT) :: error + INTEGER :: error_0, error_1, error_2, error_3 ! INTEGER, EXTERNAL :: h5init_types_c ! INTEGER, EXTERNAL :: h5init_flags_c ! INTEGER, EXTERNAL :: h5init1_flags_c @@ -57,78 +58,90 @@ ! ! MS FORTRAN needs explicit interfaces for C functions called here. ! - INTERFACE - INTEGER FUNCTION h5open_c() - !DEC$ IF DEFINED(HDF5F90_WINDOWS) - !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5OPEN_C'::h5open_c - !DEC$ ENDIF - END FUNCTION h5open_c - END INTERFACE - INTERFACE - INTEGER FUNCTION h5init_types_c(p_types, f_types, i_types) - USE H5GLOBAL - INTEGER(HID_T), DIMENSION(PREDEF_TYPES_LEN) :: p_types - INTEGER(HID_T), DIMENSION(FLOATING_TYPES_LEN) :: f_types - INTEGER(HID_T), DIMENSION(INTEGER_TYPES_LEN) :: i_types - !DEC$ IF DEFINED(HDF5F90_WINDOWS) - !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5INIT_TYPES_C'::h5init_types_c - !DEC$ ENDIF - END FUNCTION h5init_types_c - END INTERFACE - INTERFACE - INTEGER FUNCTION h5init_flags_c(i_H5D_flags, & - i_H5F_flags, & - i_H5FD_flags, & - i_H5FD_hid_flags, & - i_H5G_flags, & - i_H5I_flags, & - i_H5P_flags, & - i_H5R_flags, & - i_H5S_flags, & - i_H5T_flags, & - i_H5Z_flags) - USE H5GLOBAL - INTEGER i_H5F_flags(H5F_FLAGS_LEN) - INTEGER i_H5G_flags(H5G_FLAGS_LEN) - INTEGER i_H5D_flags(H5D_FLAGS_LEN) - INTEGER i_H5FD_flags(H5FD_FLAGS_LEN) - INTEGER(HID_T) i_H5FD_hid_flags(H5FD_HID_FLAGS_LEN) - INTEGER i_H5I_flags(H5I_FLAGS_LEN) - INTEGER(HID_T) i_H5P_flags(H5P_FLAGS_LEN) - INTEGER i_H5R_flags(H5R_FLAGS_LEN) - INTEGER i_H5S_flags(H5S_FLAGS_LEN) - INTEGER i_H5T_flags(H5T_FLAGS_LEN) - INTEGER i_H5Z_flags(H5Z_FLAGS_LEN) + INTERFACE + INTEGER FUNCTION h5open_c() + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5OPEN_C'::h5open_c + !DEC$ ENDIF + END FUNCTION h5open_c + END INTERFACE + INTERFACE + INTEGER FUNCTION h5init_types_c(p_types, f_types, i_types) + USE H5GLOBAL + INTEGER(HID_T), DIMENSION(PREDEF_TYPES_LEN) :: p_types + INTEGER(HID_T), DIMENSION(FLOATING_TYPES_LEN) :: f_types + INTEGER(HID_T), DIMENSION(INTEGER_TYPES_LEN) :: i_types + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5INIT_TYPES_C'::h5init_types_c + !DEC$ ENDIF + END FUNCTION h5init_types_c + END INTERFACE + INTERFACE + INTEGER FUNCTION h5init_flags_c(i_H5D_flags, & + i_H5F_flags, & + i_H5FD_flags, & + i_H5FD_hid_flags, & + i_H5G_flags, & + i_H5I_flags, & + i_H5L_flags, & + i_H5O_flags, & + i_H5P_flags, & + i_H5P_flags_int, & + i_H5R_flags, & + i_H5S_flags, & + i_H5T_flags, & + i_H5Z_flags, & + i_H5generic_flags) + USE H5GLOBAL + INTEGER i_H5F_flags(H5F_FLAGS_LEN) + INTEGER i_H5G_flags(H5G_FLAGS_LEN) + INTEGER i_H5D_flags(H5D_FLAGS_LEN) + INTEGER i_H5FD_flags(H5FD_FLAGS_LEN) + INTEGER(HID_T) i_H5FD_hid_flags(H5FD_HID_FLAGS_LEN) + INTEGER i_H5I_flags(H5I_FLAGS_LEN) + INTEGER i_H5L_flags(H5L_FLAGS_LEN) + INTEGER i_H5O_flags(H5O_FLAGS_LEN) + INTEGER(HID_T) i_H5P_flags(H5P_FLAGS_LEN) + INTEGER i_H5P_flags_int(H5P_FLAGS_INT_LEN) + INTEGER i_H5R_flags(H5R_FLAGS_LEN) + INTEGER i_H5S_flags(H5S_FLAGS_LEN) + INTEGER i_H5T_flags(H5T_FLAGS_LEN) + INTEGER i_H5Z_flags(H5Z_FLAGS_LEN) + INTEGER i_H5generic_flags(H5generic_FLAGS_LEN) !DEC$ IF DEFINED(HDF5F90_WINDOWS) !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5INIT_FLAGS_C'::h5init_flags_c !DEC$ ENDIF - END FUNCTION h5init_flags_c - END INTERFACE - INTERFACE - INTEGER FUNCTION h5init1_flags_c( i_H5LIB_flags ) - USE H5GLOBAL - INTEGER i_H5LIB_flags(H5LIB_FLAGS_LEN) - !DEC$ IF DEFINED(HDF5F90_WINDOWS) - !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5INIT1_FLAGS_C'::h5init1_flags_c - !DEC$ ENDIF - END FUNCTION h5init1_flags_c - END INTERFACE - error_0 = h5open_c() - error_1 = h5init_types_c(predef_types, floating_types, integer_types) - error_2 = h5init_flags_c(H5D_flags, & - H5F_flags, & - H5FD_flags, & - H5FD_hid_flags, & - H5G_flags, & - H5I_flags, & - H5P_flags, & - H5R_flags, & - H5S_flags, & - H5T_flags, & - H5Z_flags) - error_3 = h5init1_flags_c(H5LIB_flags ) - error = error_0 + error_1 + error_2 + error_3 - END SUBROUTINE h5open_f + END FUNCTION h5init_flags_c + END INTERFACE + INTERFACE + INTEGER FUNCTION h5init1_flags_c( i_H5LIB_flags ) + USE H5GLOBAL + INTEGER i_H5LIB_flags(H5LIB_FLAGS_LEN) + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5INIT1_FLAGS_C'::h5init1_flags_c + !DEC$ ENDIF + END FUNCTION h5init1_flags_c + END INTERFACE + error_0 = h5open_c() + error_1 = h5init_types_c(predef_types, floating_types, integer_types) + error_2 = h5init_flags_c(H5D_flags, & + H5F_flags, & + H5FD_flags, & + H5FD_hid_flags, & + H5G_flags, & + H5I_flags, & + H5L_flags, & + H5O_flags, & + H5P_flags, & + H5P_flags_int, & + H5R_flags, & + H5S_flags, & + H5T_flags, & + H5Z_flags, & + H5generic_flags) + error_3 = h5init1_flags_c(H5LIB_flags ) + error = error_0 + error_1 + error_2 + error_3 + END SUBROUTINE h5open_f !---------------------------------------------------------------------- ! Name: h5close_f @@ -153,49 +166,49 @@ ! Comment: !---------------------------------------------------------------------- - SUBROUTINE h5close_f(error) + SUBROUTINE h5close_f(error) ! !This definition is needed for Windows DLLs !DEC$if defined(BUILD_HDF5_DLL) !DEC$attributes dllexport :: h5close_f !DEC$endif ! - USE H5GLOBAL + USE H5GLOBAL - IMPLICIT NONE - INTEGER :: error_1, error_2 - INTEGER, INTENT(OUT) :: error -! INTEGER, EXTERNAL :: h5close_types_c, h5close_c - INTERFACE - INTEGER FUNCTION h5close_c() - !DEC$ IF DEFINED(HDF5F90_WINDOWS) - !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5CLOSE_C'::h5close_c - !DEC$ ENDIF - END FUNCTION h5close_c - END INTERFACE - INTERFACE - INTEGER FUNCTION h5close_types_c(p_types, P_TYPES_LEN, & - f_types, F_TYPES_LEN, & - i_types, I_TYPES_LEN ) - USE H5GLOBAL - INTEGER P_TYPES_LEN - INTEGER F_TYPES_LEN - INTEGER I_TYPES_LEN - INTEGER(HID_T), DIMENSION(P_TYPES_LEN) :: p_types - INTEGER(HID_T), DIMENSION(F_TYPES_LEN) :: f_types - INTEGER(HID_T), DIMENSION(I_TYPES_LEN) :: i_types - !DEC$ IF DEFINED(HDF5F90_WINDOWS) - !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5CLOSE_TYPES_C'::h5close_types_c - !DEC$ ENDIF - END FUNCTION h5close_types_c - END INTERFACE - error_1 = h5close_types_c(predef_types, PREDEF_TYPES_LEN, & - floating_types, FLOATING_TYPES_LEN, & - integer_types, INTEGER_TYPES_LEN ) - error_2 = h5close_c() - error = error_1 + error_2 + IMPLICIT NONE + INTEGER :: error_1, error_2 + INTEGER, INTENT(OUT) :: error + ! INTEGER, EXTERNAL :: h5close_types_c, h5close_c + INTERFACE + INTEGER FUNCTION h5close_c() + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5CLOSE_C'::h5close_c + !DEC$ ENDIF + END FUNCTION h5close_c + END INTERFACE + INTERFACE + INTEGER FUNCTION h5close_types_c(p_types, P_TYPES_LEN, & + f_types, F_TYPES_LEN, & + i_types, I_TYPES_LEN ) + USE H5GLOBAL + INTEGER P_TYPES_LEN + INTEGER F_TYPES_LEN + INTEGER I_TYPES_LEN + INTEGER(HID_T), DIMENSION(P_TYPES_LEN) :: p_types + INTEGER(HID_T), DIMENSION(F_TYPES_LEN) :: f_types + INTEGER(HID_T), DIMENSION(I_TYPES_LEN) :: i_types + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5CLOSE_TYPES_C'::h5close_types_c + !DEC$ ENDIF + END FUNCTION h5close_types_c + END INTERFACE + error_1 = h5close_types_c(predef_types, PREDEF_TYPES_LEN, & + floating_types, FLOATING_TYPES_LEN, & + integer_types, INTEGER_TYPES_LEN ) + error_2 = h5close_c() + error = error_1 + error_2 - END SUBROUTINE h5close_f + END SUBROUTINE h5close_f !---------------------------------------------------------------------- ! Name: h5get_libversion_f @@ -219,29 +232,29 @@ ! Comment: !---------------------------------------------------------------------- - SUBROUTINE h5get_libversion_f(majnum, minnum, relnum, error) + SUBROUTINE h5get_libversion_f(majnum, minnum, relnum, error) ! !This definition is needed for Windows DLLs !DEC$if defined(BUILD_HDF5_DLL) !DEC$attributes dllexport :: h5get_libversion_f !DEC$endif ! - USE H5GLOBAL - - IMPLICIT NONE - INTEGER, INTENT(OUT) :: majnum, minnum, relnum, error - INTERFACE - INTEGER FUNCTION h5get_libversion_c(majnum, minnum, relnum) - !DEC$ IF DEFINED(HDF5F90_WINDOWS) - !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5GET_LIBVERSION_C'::h5get_libversion_c - !DEC$ ENDIF - INTEGER, INTENT(OUT) :: majnum, minnum, relnum - END FUNCTION h5get_libversion_c - END INTERFACE - - error = h5get_libversion_c(majnum, minnum, relnum) - - END SUBROUTINE h5get_libversion_f + USE H5GLOBAL + + IMPLICIT NONE + INTEGER, INTENT(OUT) :: majnum, minnum, relnum, error + INTERFACE + INTEGER FUNCTION h5get_libversion_c(majnum, minnum, relnum) + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5GET_LIBVERSION_C'::h5get_libversion_c + !DEC$ ENDIF + INTEGER, INTENT(OUT) :: majnum, minnum, relnum + END FUNCTION h5get_libversion_c + END INTERFACE + + error = h5get_libversion_c(majnum, minnum, relnum) + + END SUBROUTINE h5get_libversion_f !---------------------------------------------------------------------- ! Name: h5check_version_f @@ -265,30 +278,30 @@ ! Comment: !---------------------------------------------------------------------- - SUBROUTINE h5check_version_f(majnum, minnum, relnum, error) + SUBROUTINE h5check_version_f(majnum, minnum, relnum, error) ! !This definition is needed for Windows DLLs !DEC$if defined(BUILD_HDF5_DLL) !DEC$attributes dllexport :: h5check_version_f !DEC$endif ! - USE H5GLOBAL - - IMPLICIT NONE - INTEGER, INTENT(IN) :: majnum, minnum, relnum - INTEGER, INTENT(OUT) :: error - INTERFACE - INTEGER FUNCTION h5check_version_c(majnum, minnum, relnum) - !DEC$ IF DEFINED(HDF5F90_WINDOWS) - !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5CHECK_VERSION_C'::h5check_version_c - !DEC$ ENDIF - INTEGER, INTENT(IN) :: majnum, minnum, relnum - END FUNCTION h5check_version_c - END INTERFACE - - error = h5check_version_c(majnum, minnum, relnum) - - END SUBROUTINE h5check_version_f + USE H5GLOBAL + + IMPLICIT NONE + INTEGER, INTENT(IN) :: majnum, minnum, relnum + INTEGER, INTENT(OUT) :: error + INTERFACE + INTEGER FUNCTION h5check_version_c(majnum, minnum, relnum) + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5CHECK_VERSION_C'::h5check_version_c + !DEC$ ENDIF + INTEGER, INTENT(IN) :: majnum, minnum, relnum + END FUNCTION h5check_version_c + END INTERFACE + + error = h5check_version_c(majnum, minnum, relnum) + + END SUBROUTINE h5check_version_f !---------------------------------------------------------------------- ! Name: h5garbage_collect_f @@ -310,28 +323,28 @@ ! Comment: !---------------------------------------------------------------------- - SUBROUTINE h5garbage_collect_f(error) + SUBROUTINE h5garbage_collect_f(error) ! !This definition is needed for Windows DLLs !DEC$if defined(BUILD_HDF5_DLL) !DEC$attributes dllexport :: h5garbage_collect_f !DEC$endif ! - USE H5GLOBAL + USE H5GLOBAL + + IMPLICIT NONE + INTEGER, INTENT(OUT) :: error + INTERFACE + INTEGER FUNCTION h5garbage_collect_c() + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5GARBAGE_COLLECT_C'::h5garbage_collect_c + !DEC$ ENDIF + END FUNCTION h5garbage_collect_c + END INTERFACE + + error = h5garbage_collect_c() - IMPLICIT NONE - INTEGER, INTENT(OUT) :: error - INTERFACE - INTEGER FUNCTION h5garbage_collect_c() - !DEC$ IF DEFINED(HDF5F90_WINDOWS) - !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5GARBAGE_COLLECT_C'::h5garbage_collect_c - !DEC$ ENDIF - END FUNCTION h5garbage_collect_c - END INTERFACE - - error = h5garbage_collect_c() - - END SUBROUTINE h5garbage_collect_f + END SUBROUTINE h5garbage_collect_f !---------------------------------------------------------------------- ! Name: h5dont_atexit_f @@ -353,26 +366,26 @@ ! Comment: !---------------------------------------------------------------------- - SUBROUTINE h5dont_atexit_f(error) + SUBROUTINE h5dont_atexit_f(error) ! !This definition is needed for Windows DLLs !DEC$if defined(BUILD_HDF5_DLL) !DEC$attributes dllexport :: h5dont_atexit_f !DEC$endif ! - USE H5GLOBAL - - IMPLICIT NONE - INTEGER, INTENT(OUT) :: error - INTERFACE - INTEGER FUNCTION h5dont_atexit_c() - !DEC$ IF DEFINED(HDF5F90_WINDOWS) - !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5DONT_ATEXIT_C'::h5dont_atexit_c - !DEC$ ENDIF - END FUNCTION h5dont_atexit_c - END INTERFACE - - error = h5dont_atexit_c() - - END SUBROUTINE h5dont_atexit_f - END MODULE H5LIB + USE H5GLOBAL + + IMPLICIT NONE + INTEGER, INTENT(OUT) :: error + INTERFACE + INTEGER FUNCTION h5dont_atexit_c() + !DEC$ IF DEFINED(HDF5F90_WINDOWS) + !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5DONT_ATEXIT_C'::h5dont_atexit_c + !DEC$ ENDIF + END FUNCTION h5dont_atexit_c + END INTERFACE + + error = h5dont_atexit_c() + + END SUBROUTINE h5dont_atexit_f +END MODULE H5LIB diff --git a/fortran/src/H5f90global.f90 b/fortran/src/H5f90global.f90 index a13d732..251e49c 100644 --- a/fortran/src/H5f90global.f90 +++ b/fortran/src/H5f90global.f90 @@ -15,19 +15,20 @@ ! MODULE H5GLOBAL USE H5FORTRAN_TYPES +! ! ! Definitions for reference datatypes. ! If you change the value of these parameters, do not forget to change corresponding ! values in the H5f90.h file. - INTEGER, PARAMETER :: REF_REG_BUF_LEN = 3 + INTEGER, PARAMETER :: REF_REG_BUF_LEN = 3 - TYPE hobj_ref_t_f - INTEGER(HADDR_T) ref - END TYPE + TYPE hobj_ref_t_f + INTEGER(HADDR_T) ref + END TYPE hobj_ref_t_f - TYPE hdset_reg_ref_t_f - INTEGER ref(REF_REG_BUF_LEN) - END TYPE + TYPE hdset_reg_ref_t_f + INTEGER ref(REF_REG_BUF_LEN) + END TYPE hdset_reg_ref_t_f INTEGER, PARAMETER :: PREDEF_TYPES_LEN = 6 ! Do not forget to change this ! value when new predefined @@ -41,32 +42,32 @@ INTEGER, PARAMETER :: INTEGER_TYPES_LEN = 17 INTEGER(HID_T) H5T_NATIVE_INTEGER, & - H5T_NATIVE_REAL, & - H5T_NATIVE_DOUBLE, & - H5T_NATIVE_CHARACTER , & - H5T_STD_REF_OBJ, & - H5T_STD_REF_DSETREG, & - H5T_IEEE_F32BE, & - H5T_IEEE_F32LE, & - H5T_IEEE_F64BE, & - H5T_IEEE_F64LE, & - H5T_STD_I8BE, & - H5T_STD_I8LE, & - H5T_STD_I16BE, & - H5T_STD_I16LE, & - H5T_STD_I32BE, & - H5T_STD_I32LE, & - H5T_STD_I64BE, & - H5T_STD_I64LE, & - H5T_STD_U8BE, & - H5T_STD_U8LE, & - H5T_STD_U16BE, & - H5T_STD_U16LE, & - H5T_STD_U32BE, & - H5T_STD_U32LE, & - H5T_STD_U64BE, & - H5T_STD_U64LE, & - H5T_STRING + H5T_NATIVE_REAL, & + H5T_NATIVE_DOUBLE, & + H5T_NATIVE_CHARACTER , & + H5T_STD_REF_OBJ, & + H5T_STD_REF_DSETREG, & + H5T_IEEE_F32BE, & + H5T_IEEE_F32LE, & + H5T_IEEE_F64BE, & + H5T_IEEE_F64LE, & + H5T_STD_I8BE, & + H5T_STD_I8LE, & + H5T_STD_I16BE, & + H5T_STD_I16LE, & + H5T_STD_I32BE, & + H5T_STD_I32LE, & + H5T_STD_I64BE, & + H5T_STD_I64LE, & + H5T_STD_U8BE, & + H5T_STD_U8LE, & + H5T_STD_U16BE, & + H5T_STD_U16LE, & + H5T_STD_U32BE, & + H5T_STD_U32LE, & + H5T_STD_U64BE, & + H5T_STD_U64LE, & + H5T_STRING INTEGER(HID_T), DIMENSION(PREDEF_TYPES_LEN) :: predef_types @@ -76,13 +77,13 @@ EQUIVALENCE (predef_types(4), H5T_NATIVE_CHARACTER) EQUIVALENCE (predef_types(5), H5T_STD_REF_OBJ) EQUIVALENCE (predef_types(6), H5T_STD_REF_DSETREG) - + INTEGER(HID_T), DIMENSION(FLOATING_TYPES_LEN) :: floating_types EQUIVALENCE (floating_types(1), H5T_IEEE_F32BE ) EQUIVALENCE (floating_types(2), H5T_IEEE_F32LE) EQUIVALENCE (floating_types(3), H5T_IEEE_F64BE) EQUIVALENCE (floating_types(4), H5T_IEEE_F64LE) - + INTEGER(HID_T), DIMENSION(INTEGER_TYPES_LEN) :: integer_types EQUIVALENCE (integer_types(1), H5T_STD_I8BE ) EQUIVALENCE (integer_types(2), H5T_STD_I8LE) @@ -151,7 +152,7 @@ ! ! H5F flags declaration ! - INTEGER, PARAMETER :: H5F_FLAGS_LEN = 16 + INTEGER, PARAMETER :: H5F_FLAGS_LEN = 19 INTEGER H5F_flags(H5F_FLAGS_LEN) !DEC$if defined(BUILD_HDF5_DLL) !DEC$ ATTRIBUTES DLLEXPORT :: /H5F_FLAGS/ @@ -174,6 +175,8 @@ INTEGER :: H5F_OBJ_GROUP_F INTEGER :: H5F_OBJ_DATATYPE_F INTEGER :: H5F_OBJ_ALL_F + INTEGER :: H5F_LIBVER_EARLIEST_F + INTEGER :: H5F_LIBVER_LATEST_F EQUIVALENCE(H5F_flags(1), H5F_ACC_RDWR_F) EQUIVALENCE(H5F_flags(2), H5F_ACC_RDONLY_F) @@ -191,10 +194,43 @@ EQUIVALENCE(H5F_flags(14), H5F_OBJ_GROUP_F) EQUIVALENCE(H5F_flags(15), H5F_OBJ_DATATYPE_F) EQUIVALENCE(H5F_flags(16), H5F_OBJ_ALL_F) + EQUIVALENCE(H5F_flags(17), H5F_LIBVER_EARLIEST_F) + EQUIVALENCE(H5F_flags(18), H5F_LIBVER_LATEST_F) +! +! H5generic flags declaration +! + INTEGER, PARAMETER :: H5generic_FLAGS_LEN = 9 + INTEGER H5generic_flags(H5generic_FLAGS_LEN) +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$ ATTRIBUTES DLLEXPORT :: /H5generic_FLAGS/ +!DEC$endif + COMMON /H5generic_FLAGS/ H5generic_flags + + INTEGER :: H5_INDEX_UNKNOWN_F + INTEGER :: H5_INDEX_NAME_F + INTEGER :: H5_INDEX_CRT_ORDER_F + INTEGER :: H5_INDEX_N_F + INTEGER :: H5_ITER_UNKNOWN_F + INTEGER :: H5_ITER_INC_F + INTEGER :: H5_ITER_DEC_F + INTEGER :: H5_ITER_NATIVE_F + INTEGER :: H5_ITER_N_F + + EQUIVALENCE(H5generic_flags(1), H5_INDEX_UNKNOWN_F) + EQUIVALENCE(H5generic_flags(2), H5_INDEX_NAME_F) + EQUIVALENCE(H5generic_flags(3), H5_INDEX_CRT_ORDER_F) + EQUIVALENCE(H5generic_flags(4), H5_INDEX_N_F) + EQUIVALENCE(H5generic_flags(5), H5_ITER_UNKNOWN_F) + EQUIVALENCE(H5generic_flags(6), H5_ITER_INC_F) + EQUIVALENCE(H5generic_flags(7), H5_ITER_DEC_F) + EQUIVALENCE(H5generic_flags(8), H5_ITER_NATIVE_F) + EQUIVALENCE(H5generic_flags(9), H5_ITER_N_F) + + ! ! H5G flags declaration ! - INTEGER, PARAMETER :: H5G_FLAGS_LEN = 8 + INTEGER, PARAMETER :: H5G_FLAGS_LEN = 12 INTEGER H5G_flags(H5G_FLAGS_LEN) !DEC$if defined(BUILD_HDF5_DLL) !DEC$ ATTRIBUTES DLLEXPORT :: /H5G_FLAGS/ @@ -210,16 +246,26 @@ INTEGER :: H5G_LINK_ERROR_F INTEGER :: H5G_LINK_HARD_F INTEGER :: H5G_LINK_SOFT_F + INTEGER :: H5G_STORAGE_TYPE_UNKNOWN_F + INTEGER :: H5G_STORAGE_TYPE_SYMBOL_TABLE_F + INTEGER :: H5G_STORAGE_TYPE_COMPACT_F + INTEGER :: H5G_STORAGE_TYPE_DENSE_F EQUIVALENCE(H5G_flags(1), H5G_UNKNOWN_F) EQUIVALENCE(H5G_flags(2), H5G_GROUP_F) EQUIVALENCE(H5G_flags(3), H5G_DATASET_F) EQUIVALENCE(H5G_flags(4), H5G_TYPE_F) -! XXX: Fix problems with H5G_LINK_F! - QAK +! XXX: Fix problems with H5G_LINK_F! - QAK ! these are really H5L values -MSB- EQUIVALENCE(H5G_flags(5), H5G_LINK_F) - EQUIVALENCE(H5G_flags(6), H5G_LINK_ERROR_F) - EQUIVALENCE(H5G_flags(7), H5G_LINK_HARD_F) - EQUIVALENCE(H5G_flags(8), H5G_LINK_SOFT_F) + EQUIVALENCE(H5G_flags(6), H5G_LINK_ERROR_F) + EQUIVALENCE(H5G_flags(7), H5G_LINK_HARD_F) + EQUIVALENCE(H5G_flags(8), H5G_LINK_SOFT_F) +! XXX + + EQUIVALENCE(H5G_flags(9), H5G_STORAGE_TYPE_UNKNOWN_F ) + EQUIVALENCE(H5G_flags(10), H5G_STORAGE_TYPE_SYMBOL_TABLE_F) + EQUIVALENCE(H5G_flags(11), H5G_STORAGE_TYPE_COMPACT_F) + EQUIVALENCE(H5G_flags(12), H5G_STORAGE_TYPE_DENSE_F) ! ! H5D flags declaration ! @@ -338,8 +384,6 @@ EQUIVALENCE(H5FD_hid_flags(6), H5FD_SEC2_F) EQUIVALENCE(H5FD_hid_flags(7), H5FD_STDIO_F) - - ! ! H5I flags declaration ! @@ -365,24 +409,114 @@ EQUIVALENCE(H5I_flags(5), H5I_DATASET_F) EQUIVALENCE(H5I_flags(6), H5I_ATTR_F) EQUIVALENCE(H5I_flags(7), H5I_BADID_F) +! +! H5L flags declaration +! + INTEGER, PARAMETER :: H5L_FLAGS_LEN = 6 + INTEGER :: H5L_flags(H5L_FLAGS_LEN) + + INTEGER :: H5L_LINK_F + INTEGER :: H5L_LINK_ERROR_F + INTEGER :: H5L_LINK_HARD_F + INTEGER :: H5L_LINK_SOFT_F + INTEGER :: H5L_SAME_LOC_F + INTEGER :: H5L_LINK_CLASS_T_VERS_F + +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$ ATTRIBUTES DLLEXPORT :: /H5L_FLAGS/ +!DEC$endif + COMMON /H5L_FLAGS/ H5L_flags + + EQUIVALENCE(H5L_flags(1), H5L_LINK_F) + EQUIVALENCE(H5L_flags(2), H5L_LINK_ERROR_F) + EQUIVALENCE(H5L_flags(3), H5L_LINK_HARD_F) + EQUIVALENCE(H5L_flags(4), H5L_LINK_SOFT_F) + EQUIVALENCE(H5L_flags(5), H5L_SAME_LOC_F) + EQUIVALENCE(H5L_flags(6), H5L_LINK_CLASS_T_VERS_F) +! +! H5O flags declaration +! + INTEGER, PARAMETER :: H5O_FLAGS_LEN = 22 + INTEGER :: H5o_flags(H5O_FLAGS_LEN) +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$ ATTRIBUTES DLLEXPORT :: /H5O_FLAGS/ +!DEC$endif + COMMON /H5O_FLAGS/ H5O_flags + + INTEGER :: H5O_COPY_SHALLOW_HIERARCHY_F ! * THESE VARIABLES DO + INTEGER :: H5O_COPY_EXPAND_SOFT_LINK_F ! NOT MATCH THE C VARIABLE + INTEGER :: H5O_COPY_EXPAND_EXT_LINK_F ! IN ORDER + INTEGER :: H5O_COPY_EXPAND_REFERENCE_F ! TO STAY UNDER THE + INTEGER :: H5O_COPY_WITHOUT_ATTR_FLAG_F + INTEGER :: H5O_COPY_PRESERVE_NULL_FLAG_F + INTEGER :: H5O_COPY_ALL_F + INTEGER :: H5O_SHMESG_NONE_FLAG_F + INTEGER :: H5O_SHMESG_SDSPACE_FLAG_F + INTEGER :: H5O_SHMESG_DTYPE_FLAG_F + INTEGER :: H5O_SHMESG_FILL_FLAG_F + INTEGER :: H5O_SHMESG_PLINE_FLAG_F + INTEGER :: H5O_SHMESG_ATTR_FLAG_F + INTEGER :: H5O_SHMESG_ALL_FLAG_F + INTEGER :: H5O_HDR_CHUNK0_SIZE_F + INTEGER :: H5O_HDR_ATTR_CRT_ORDER_TRACK_F ! 32 CHARACTER + INTEGER :: H5O_HDR_ATTR_CRT_ORDER_INDEX_F ! VARIABLE + INTEGER :: H5O_HDR_ATTR_STORE_PHASE_CHA_F ! LENGTH * + INTEGER :: H5O_HDR_STORE_TIMES_F + INTEGER :: H5O_HDR_ALL_FLAGS_F + INTEGER :: H5O_SHMESG_MAX_NINDEXES_F + INTEGER :: H5O_SHMESG_MAX_LIST_SIZE_F + + EQUIVALENCE(h5o_flags(1) , H5O_COPY_SHALLOW_HIERARCHY_F) + EQUIVALENCE(h5o_flags(2) , H5O_COPY_EXPAND_SOFT_LINK_F) + EQUIVALENCE(h5o_flags(3) , H5O_COPY_EXPAND_EXT_LINK_F) + EQUIVALENCE(h5o_flags(4) , H5O_COPY_EXPAND_REFERENCE_F) + EQUIVALENCE(h5o_flags(5) , H5O_COPY_WITHOUT_ATTR_FLAG_F) + EQUIVALENCE(h5o_flags(6) , H5O_COPY_PRESERVE_NULL_FLAG_F) + EQUIVALENCE(h5o_flags(7) , H5O_COPY_ALL_F) + EQUIVALENCE(h5o_flags(8) , H5O_SHMESG_NONE_FLAG_F) + EQUIVALENCE(h5o_flags(9) , H5O_SHMESG_SDSPACE_FLAG_F) + EQUIVALENCE(h5o_flags(10) , H5O_SHMESG_DTYPE_FLAG_F) + EQUIVALENCE(h5o_flags(11) , H5O_SHMESG_FILL_FLAG_F) + EQUIVALENCE(h5o_flags(12) , H5O_SHMESG_PLINE_FLAG_F) + EQUIVALENCE(h5o_flags(13) , H5O_SHMESG_ATTR_FLAG_F) + EQUIVALENCE(h5o_flags(14) , H5O_SHMESG_ALL_FLAG_F) + EQUIVALENCE(h5o_flags(15) , H5O_HDR_CHUNK0_SIZE_F) + EQUIVALENCE(h5o_flags(16) , H5O_HDR_ATTR_CRT_ORDER_TRACK_F) + EQUIVALENCE(h5o_flags(17) , H5O_HDR_ATTR_CRT_ORDER_INDEX_F) + EQUIVALENCE(h5o_flags(18) , H5O_HDR_ATTR_STORE_PHASE_CHA_F) + EQUIVALENCE(h5o_flags(19) , H5O_HDR_STORE_TIMES_F) + EQUIVALENCE(h5o_flags(20) , H5O_HDR_ALL_FLAGS_F) + EQUIVALENCE(h5o_flags(21) , H5O_SHMESG_MAX_NINDEXES_F) + EQUIVALENCE(h5o_flags(22) , H5O_SHMESG_MAX_LIST_SIZE_F) ! ! H5P flags declaration ! - INTEGER, PARAMETER :: H5P_FLAGS_LEN = 7 + INTEGER, PARAMETER :: H5P_FLAGS_LEN = 18 INTEGER(HID_T) H5P_flags(H5P_FLAGS_LEN) !DEC$if defined(BUILD_HDF5_DLL) !DEC$ ATTRIBUTES DLLEXPORT :: /H5P_FLAGS/ !DEC$endif COMMON /H5P_FLAGS/ H5P_flags - INTEGER(HID_T) :: H5P_FILE_CREATE_F - INTEGER(HID_T) :: H5P_FILE_ACCESS_F - INTEGER(HID_T) :: H5P_DATASET_CREATE_F - INTEGER(HID_T) :: H5P_DATASET_XFER_F - INTEGER(HID_T) :: H5P_FILE_MOUNT_F - INTEGER(HID_T) :: H5P_DEFAULT_F - INTEGER(HID_T) :: H5P_ROOT_F + INTEGER(HID_T) :: H5P_FILE_CREATE_F + INTEGER(HID_T) :: H5P_FILE_ACCESS_F + INTEGER(HID_T) :: H5P_DATASET_CREATE_F + INTEGER(HID_T) :: H5P_DATASET_XFER_F + INTEGER(HID_T) :: H5P_FILE_MOUNT_F + INTEGER(HID_T) :: H5P_DEFAULT_F + INTEGER(HID_T) :: H5P_ROOT_F + INTEGER(HID_T) :: H5P_OBJECT_CREATE_F + INTEGER(HID_T) :: H5P_DATASET_ACCESS_F + INTEGER(HID_T) :: H5P_GROUP_CREATE_F + INTEGER(HID_T) :: H5P_GROUP_ACCESS_F + INTEGER(HID_T) :: H5P_DATATYPE_CREATE_F + INTEGER(HID_T) :: H5P_DATATYPE_ACCESS_F + INTEGER(HID_T) :: H5P_STRING_CREATE_F + INTEGER(HID_T) :: H5P_ATTRIBUTE_CREATE_F + INTEGER(HID_T) :: H5P_OBJECT_COPY_F + INTEGER(HID_T) :: H5P_LINK_CREATE_F + INTEGER(HID_T) :: H5P_LINK_ACCESS_F EQUIVALENCE(H5P_flags(1), H5P_FILE_CREATE_F) EQUIVALENCE(H5P_flags(2), H5P_FILE_ACCESS_F) @@ -391,9 +525,33 @@ EQUIVALENCE(H5P_flags(5), H5P_FILE_MOUNT_F) EQUIVALENCE(H5P_flags(6), H5P_DEFAULT_F) EQUIVALENCE(H5P_flags(7), H5P_ROOT_F) + EQUIVALENCE(H5P_flags(8), H5P_OBJECT_CREATE_F) + EQUIVALENCE(H5P_flags(9), H5P_DATASET_ACCESS_F) + EQUIVALENCE(H5P_flags(10), H5P_GROUP_CREATE_F) + EQUIVALENCE(H5P_flags(11), H5P_GROUP_ACCESS_F) + EQUIVALENCE(H5P_flags(12), H5P_DATATYPE_CREATE_F) + EQUIVALENCE(H5P_flags(13), H5P_DATATYPE_ACCESS_F) + EQUIVALENCE(H5P_flags(14), H5P_STRING_CREATE_F) + EQUIVALENCE(H5P_flags(15), H5P_ATTRIBUTE_CREATE_F) + EQUIVALENCE(H5P_flags(16), H5P_OBJECT_COPY_F) + EQUIVALENCE(H5P_flags(17), H5P_LINK_CREATE_F) + EQUIVALENCE(H5P_flags(18), H5P_LINK_ACCESS_F) ! -! H5P flags declaration +! H5P intgere flags declaration +! + INTEGER, PARAMETER :: H5P_FLAGS_INT_LEN = 2 + INTEGER H5P_flags_int(H5P_FLAGS_INT_LEN) +!DEC$if defined(BUILD_HDF5_DLL) +!DEC$ ATTRIBUTES DLLEXPORT :: /H5P_FLAGS_INT/ +!DEC$endif + COMMON /H5P_FLAGS_INT/ H5P_flags_int + INTEGER :: H5P_CRT_ORDER_INDEXED_F + INTEGER :: H5P_CRT_ORDER_TRACKED_F + EQUIVALENCE(H5P_flags_int(1), H5P_CRT_ORDER_INDEXED_F) + EQUIVALENCE(H5P_flags_int(2), H5P_CRT_ORDER_TRACKED_F) +! +! H5R flags declaration ! INTEGER, PARAMETER :: H5R_FLAGS_LEN = 2 INTEGER H5R_flags(H5R_FLAGS_LEN) @@ -592,11 +750,27 @@ !DEC$ ATTRIBUTES DLLEXPORT :: /H5LIB_FLAGS/ !DEC$endif COMMON /H5LIB_FLAGS/ H5LIB_flags - INTEGER :: H5_SZIP_EC_OM_F - INTEGER :: H5_SZIP_NN_OM_F + INTEGER :: H5_SZIP_EC_OM_F + INTEGER :: H5_SZIP_NN_OM_F ! - EQUIVALENCE(H5LIB_flags(1), H5_SZIP_EC_OM_F) - EQUIVALENCE(H5LIB_flags(2), H5_SZIP_NN_OM_F) + EQUIVALENCE(H5LIB_flags(1), H5_SZIP_EC_OM_F) + EQUIVALENCE(H5LIB_flags(2), H5_SZIP_NN_OM_F) + - END MODULE H5GLOBAL +! General H5 flags declarations +! +!!$ INTEGER, PARAMETER :: H5_FLAGS_LEN = 2 +!!$ INTEGER H5_flags(H5_FLAGS_LEN) +!!$!DEC$if defined(BUILD_HDF5_DLL) +!!$!DEC$ ATTRIBUTES DLLEXPORT :: /H5_FLAGS/ +!!$!DEC$endif +!!$ COMMON /H5_FLAGS/ H5_flags +!!$ +!!$ INTEGER :: _F +!!$ INTEGER :: H5F_SCOPE_LOCAL_F +!!$ +!!$ EQUIVALENCE(H5F_flags(1), H5F_SCOPE_GLOBAL_F) +!!$ EQUIVALENCE(H5F_flags(2), H5F_SCOPE_LOCAL_F) + + END MODULE H5GLOBAL diff --git a/fortran/src/H5f90proto.h b/fortran/src/H5f90proto.h index 8099ecc..4c8aabf 100644 --- a/fortran/src/H5f90proto.h +++ b/fortran/src/H5f90proto.h @@ -93,6 +93,9 @@ H5_FCDLL int_f nh5fget_filesize_c(hid_t_f *file_id, hsize_t_f *size); # define nh5sselect_select_c H5_FC_FUNC_(h5sselect_select_c, H5SSELECT_SELECT_C) # define nh5sget_select_type_c H5_FC_FUNC_(h5sget_select_type_c, H5SGET_SELECT_TYPE_C) # define nh5sselect_elements_c H5_FC_FUNC_(h5sselect_elements_c, H5SSELECT_ELEMENTS_C) +# define nh5sdecode_c H5_FC_FUNC_(h5sdecode_c, H5SDECODE_C) +# define nh5sencode_c H5_FC_FUNC_(h5sencode_c, H5SENCODE_C) +# define nh5sextent_equal_c H5_FC_FUNC_(h5sextent_equal_c, H5SEXTENT_EQUAL_C) H5_FCDLL int_f nh5screate_simple_c ( int_f *rank, hsize_t_f *dims, hsize_t_f *maxdims, hid_t_f *space_id ); H5_FCDLL int_f nh5sclose_c ( hid_t_f *space_id ); @@ -123,6 +126,9 @@ H5_FCDLL int_f nh5sselect_elements_c ( hid_t_f *space_id , int_f *op, size_t_f * H5_FCDLL int_f nh5scombine_hyperslab_c ( hid_t_f *space_id , int_f *op, hsize_t_f *start, hsize_t_f *count, hsize_t_f *stride, hsize_t_f *block, hid_t_f *hyper_id); H5_FCDLL int_f nh5scombine_select_c ( hid_t_f *space1_id , int_f *op, hid_t_f *space2_id, hid_t_f *ds_id); H5_FCDLL int_f nh5sselect_select_c ( hid_t_f *space1_id , int_f *op, hid_t_f *space2_id); +H5_FCDLL int_f nh5sdecode_c ( _fcd buf, hid_t_f *obj_id ); +H5_FCDLL int_f nh5sencode_c (_fcd buf, hid_t_f *obj_id, size_t_f *nalloc ); +H5_FCDLL int_f nh5sextent_equal_c ( hid_t_f * space1_id, hid_t_f *space2_id, hid_t_f *c_equal); /* * Functions from H5Df.c @@ -207,7 +213,7 @@ H5_FCDLL int_f nh5sselect_select_c ( hid_t_f *space1_id , int_f *op, hid_t_f *sp # define nh5dget_space_c H5_FC_FUNC_(h5dget_space_c, H5DGET_SPACE_C) # define nh5dget_type_c H5_FC_FUNC_(h5dget_type_c, H5DGET_TYPE_C) # define nh5dget_create_plist_c H5_FC_FUNC_(h5dget_create_plist_c, H5DGET_CREATE_PLIST_C) -# define nh5dextend_c H5_FC_FUNC_(h5dextend_c, H5DEXTEND_C) +# define nh5dset_extent_c H5_FC_FUNC_(h5dset_extent_c, H5DSET_EXTENT_C) # define nh5dget_storage_size_c H5_FC_FUNC_(h5dget_storage_size_c, H5DGET_STORAGE_SIZE_C) # define nh5dvlen_get_max_len_c H5_FC_FUNC_(h5dvlen_get_max_len_c, H5DVLEN_GET_MAX_LEN_C) # define nh5dwrite_vl_integer_c H5_FC_FUNC_(h5dwrite_vl_integer_c, H5DWRITE_VL_INTEGER_C) @@ -222,12 +228,13 @@ H5_FCDLL int_f nh5sselect_select_c ( hid_t_f *space1_id , int_f *op, hid_t_f *sp # define nh5dfill_real_c H5_FC_FUNC_(h5dfill_real_c, H5DFILL_REAL_C) # define nh5dfill_double_c H5_FC_FUNC_(h5dfill_double_c, H5DFILL_DOUBLE_C) # define nh5dget_space_status_c H5_FC_FUNC_(h5dget_space_status_c, H5DGET_SPACE_STATUS_C) +# define nh5dcreate_anon_c H5_FC_FUNC_(h5dcreate_anon_c, H5DCREATE_ANON_C) -H5_FCDLL int_f nh5dcreate_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *type_id, hid_t_f *space_id, hid_t_f *crt_prp, hid_t_f *dset_id); -H5_FCDLL int_f nh5dopen_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *dset_id); +H5_FCDLL int_f nh5dcreate_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *type_id, hid_t_f *space_id, + hid_t_f *lcpl_id, hid_t_f *dcpl_id, hid_t_f *dapl_id, hid_t_f *dset_id); +H5_FCDLL int_f nh5dopen_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *dapl_id, hid_t_f *dset_id); H5_FCDLL int_f nh5dclose_c ( hid_t_f *dset_id ); - H5_FCDLL int_f nh5dwrite_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims); H5_FCDLL int_f nh5dwrite_integer_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims); H5_FCDLL int_f nh5dwrite_integer_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims); @@ -322,7 +329,7 @@ H5_FCDLL int_f nh5dreadc_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *m H5_FCDLL int_f nh5dget_space_c ( hid_t_f *dset_id , hid_t_f *space_id); H5_FCDLL int_f nh5dget_type_c ( hid_t_f *dset_id , hid_t_f *type_id); H5_FCDLL int_f nh5dget_create_plist_c ( hid_t_f *dset_id , hid_t_f *plist_id); -H5_FCDLL int_f nh5dextend_c ( hid_t_f *dset_id , hsize_t_f *dims); +H5_FCDLL int_f nh5dset_extent_c ( hid_t_f *dset_id , hsize_t_f *dims); H5_FCDLL int_f nh5dvlen_get_max_len_c(hid_t_f *dataset_id, hid_t_f *type_id, hid_t_f *space_id, size_t_f *len); H5_FCDLL int_f nh5dget_storage_size_c(hid_t_f *dataset_id, hsize_t_f *size); H5_FCDLL int_f nh5dfillc_c(_fcd fill_value, hid_t_f *fill_type_id, hid_t_f *space_id, _fcd buf, hid_t_f *mem_type_id); @@ -331,6 +338,8 @@ H5_FCDLL int_f nh5dfill_integer_c(void * fill_value, hid_t_f *fill_type_id, hid_ H5_FCDLL int_f nh5dfill_real_c(void * fill_value, hid_t_f *fill_type_id, hid_t_f *space_id, void * buf, hid_t_f *mem_type_id); H5_FCDLL int_f nh5dfill_double_c(void * fill_value, hid_t_f *fill_type_id, hid_t_f *space_id, void * buf, hid_t_f *mem_type_id); H5_FCDLL int_f nh5dget_space_status_c ( hid_t_f *dset_id, int_f *flag); +H5_FCDLL int_f nh5dcreate_anon_c (hid_t_f *loc_id, hid_t_f *type_id, hid_t_f *space_id, + hid_t_f *dcpl_id, hid_t_f *dapl_id, hid_t_f *dset_id); /*MSB*/ /* * Functions from H5Gf.c @@ -348,10 +357,16 @@ H5_FCDLL int_f nh5dget_space_status_c ( hid_t_f *dset_id, int_f *flag); # define nh5gget_linkval_c H5_FC_FUNC_(h5gget_linkval_c, H5GGET_LINKVAL_C) # define nh5gset_comment_c H5_FC_FUNC_(h5gset_comment_c, H5GSET_COMMENT_C) # define nh5gget_comment_c H5_FC_FUNC_(h5gget_comment_c, H5GGET_COMMENT_C) +# define nh5gcreate_anon_c H5_FC_FUNC_(h5gcreate_anon_c, H5GCREATE_ANON_C) +# define nh5gget_create_plist_c H5_FC_FUNC_(h5gget_create_plist_c, H5GGET_CREATE_PLIST_C) +# define nh5gget_info_c H5_FC_FUNC_(h5gget_info_c, H5GGET_INFO_C) +# define nh5gget_info_by_idx_c H5_FC_FUNC_(h5gget_info_by_idx_c, H5GGET_INFO_BY_IDX_C) +# define nh5gget_info_by_name_c H5_FC_FUNC_(h5gget_info_by_name_c, H5GGET_INFO_BY_NAME_C) -H5_FCDLL int_f nh5gcreate_c (hid_t_f *loc_id, _fcd name, int_f *namelen, size_t_f *size_hint, hid_t_f *grp_id); -H5_FCDLL int_f nh5gopen_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *grp_id); +H5_FCDLL int_f nh5gcreate_c (hid_t_f *loc_id, _fcd name, int_f *namelen, size_t_f *size_hint, hid_t_f *grp_id, + hid_t_f *lcpl_id, hid_t_f *gcpl_id, hid_t_f *gapl_id); +H5_FCDLL int_f nh5gopen_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *gapl_id, hid_t_f *grp_id); H5_FCDLL int_f nh5gclose_c ( hid_t_f *grp_id ); H5_FCDLL int_f nh5gget_obj_info_idx_c (hid_t_f *loc_id, _fcd name, int_f *namelen, int_f *idx, _fcd obj_name, int_f *obj_namelen, int_f *obj_type); H5_FCDLL int_f nh5gn_members_c (hid_t_f *loc_id, _fcd name, int_f *namelen, int_f *nmembers); @@ -363,6 +378,14 @@ H5_FCDLL int_f nh5gmove2_c (hid_t_f *src_loc_id, _fcd src_name, int_f *src_namel H5_FCDLL int_f nh5gget_linkval_c (hid_t_f *loc_id, _fcd name, int_f *namelen, size_t_f *size, _fcd value ); H5_FCDLL int_f nh5gset_comment_c (hid_t_f *loc_id, _fcd name, int_f *namelen, _fcd comment, int_f *commentlen); H5_FCDLL int_f nh5gget_comment_c (hid_t_f *loc_id, _fcd name, int_f *namelen, size_t_f *bufsize, _fcd comment); +H5_FCDLL int_f nh5gcreate_anon_c (hid_t_f *loc_id, hid_t_f *gcpl_id, hid_t_f *gapl_id, hid_t_f *grp_id); /*MSB*/ +H5_FCDLL int_f nh5gget_create_plist_c(hid_t_f *grp_id, hid_t_f *gcpl_id ); /*MSB*/ +H5_FCDLL int_f nh5gget_info_c (hid_t_f *group_id, int_f *storage_type, int_f *nlinks, int_f *max_corder); /*MSB*/ +H5_FCDLL int_f nh5gget_info_by_idx_c(hid_t_f *loc_id, _fcd group_name, size_t_f *group_namelen, + int_f *index_type, int_f *order, hsize_t_f *n, hid_t_f *lapl_id, + int_f *storage_type, int_f *nlinks, int_f *max_corder); /*MSB*/ +H5_FCDLL int_f nh5gget_info_by_name_c(hid_t_f *loc_id, _fcd group_name, size_t_f *group_namelen, hid_t_f *lapl_id, + int_f *storage_type, int_f *nlinks, int_f *max_corder); /*MSB*/ /* * Functions from H5Af.c @@ -444,9 +467,25 @@ H5_FCDLL int_f nh5gget_comment_c (hid_t_f *loc_id, _fcd name, int_f *namelen, si # define nh5aget_type_c H5_FC_FUNC_(h5aget_type_c, H5AGET_TYPE_C) # define nh5aget_num_attrs_c H5_FC_FUNC_(h5aget_num_attrs_c, H5AGET_NUM_ATTRS_C) # define nh5adelete_c H5_FC_FUNC_(h5adelete_c, H5ADELETE_C) +# define nh5aget_storage_size_c H5_FC_FUNC_(h5aget_storage_size_c, H5AGET_STORAGE_SIZE_C) /* MSB */ +# define nh5arename_by_name_c H5_FC_FUNC_(h5arename_by_name_c, H5ARENAME_BY_NAME_C) /* MSB */ +# define nh5aopen_c H5_FC_FUNC_(h5aopen_c, H5AOPEN_C) /* MSB */ +# define nh5adelete_by_name_c H5_FC_FUNC_(h5adelete_by_name_c,H5ADELETE_BY_NAME_C) /* MSB */ +# define nh5adelete_by_idx_c H5_FC_FUNC_(h5adelete_by_idx_c,H5ADELETE_BY_IDX_C) /* MSB */ +# define nh5aget_name_by_idx_c H5_FC_FUNC_(h5aget_name_by_idx_c,H5AGET_NAME_BY_IDX_C) /* MSB */ +# define nh5aget_create_plist_c H5_FC_FUNC_(h5aget_create_plist_c,H5AGET_CREATE_PLIST_C) /* MSB */ +# define nh5aopen_by_idx_c H5_FC_FUNC_(h5aopen_by_idx_c,H5AOPEN_BY_IDX_C) /* MSB */ +# define nh5aget_info_c H5_FC_FUNC_(h5aget_info_c,H5AGET_INFO_C) /* MSB */ +# define nh5aget_info_by_idx_c H5_FC_FUNC_(h5aget_info_by_idx_c,H5AGET_INFO_BY_IDX_C) /* MSB */ +# define nh5aget_info_by_name_c H5_FC_FUNC_(h5aget_info_by_name_c,H5AGET_INFO_BY_NAME_C) /* MSB */ +# define nh5aget_info_by_name_c H5_FC_FUNC_(h5aget_info_by_name_c,H5AGET_INFO_BY_NAME_C) /* MSB */ +# define nh5acreate_by_name_c H5_FC_FUNC_(h5acreate_by_name_c,H5ACREATE_BY_NAME_C) /* MSB */ +# define nh5aexists_c H5_FC_FUNC_(h5aexists_c,H5AEXISTS_C) /* MSB */ +# define nh5aexists_by_name_c H5_FC_FUNC_(h5aexists_by_name_c,H5AEXISTS_BY_NAME_C) /* MSB */ +# define nh5aopen_by_name_c H5_FC_FUNC_(h5aopen_by_name_c,H5AOPEN_BY_NAME_C) /* MSB */ +# define nh5arename_c H5_FC_FUNC_(h5arename_c,H5ARENAME_C) /* MSB */ - -H5_FCDLL int_f nh5acreate_c (hid_t_f *obj_id, _fcd name, size_t_f *namelen, hid_t_f *type_id, hid_t_f *space_id, hid_t_f *crt_prp, hid_t_f *attr_id); +H5_FCDLL int_f nh5acreate_c (hid_t_f *obj_id, _fcd name, size_t_f *namelen, hid_t_f *type_id, hid_t_f *space_id, hid_t_f *crt_prp, hid_t_f *aapl, hid_t_f *attr_id); H5_FCDLL int_f nh5aopen_name_c (hid_t_f *obj_id, _fcd name, size_t_f *namelen, hid_t_f *attr_id); H5_FCDLL int_f nh5awritec_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims); H5_FCDLL int_f nh5awritec_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims); @@ -523,6 +562,45 @@ H5_FCDLL int_f nh5aget_space_c (hid_t_f *attr_id, hid_t_f *space_id); H5_FCDLL int_f nh5aget_type_c (hid_t_f *attr_id, hid_t_f *type_id); H5_FCDLL int_f nh5aget_num_attrs_c (hid_t_f *obj_id, int_f *attr_num); H5_FCDLL int_f nh5aget_name_c(hid_t_f *attr_id, size_t_f *size, _fcd buf); +H5_FCDLL int_f nh5aget_storage_size_c ( hid_t_f *attr_id, hsize_t_f *size ); /* MSB */ +H5_FCDLL int_f nh5arename_by_name_c ( hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen, + _fcd old_attr_name, size_t_f *old_attr_namelen, + _fcd new_attr_name, size_t_f *new_attr_namelen, + hid_t_f *lapl_id ); /* MSB */ +H5_FCDLL int_f nh5aopen_c ( hid_t_f *obj_id, _fcd attr_name, size_t_f *attr_namelen, + hid_t_f *aapl_id, hid_t_f *attr_id); /* MSB */ +H5_FCDLL int_f nh5adelete_by_name_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen, + _fcd attr_name, size_t_f *attr_namelen, hid_t_f *lapl_id); /* MSB */ +H5_FCDLL int_f nh5adelete_by_idx_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen, + int_f *idx_type, int_f *order, hsize_t_f *n, hid_t_f *lapl_id); /* MSB */ +H5_FCDLL int_f nh5aget_name_by_idx_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen, + int_f *idx_type, int_f *order, hsize_t_f *n, _fcd name, + size_t_f *size, hid_t_f *lapl_id); /* MSB */ +H5_FCDLL int_f nh5aget_create_plist_c ( hid_t_f *attr_id, hid_t_f *creation_prop_id ); /* MSB */ +H5_FCDLL int_f nh5aopen_by_idx_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen, + int_f *idx_type, int_f *order, size_t_f *n, hid_t_f *aapl_id, hid_t_f *lapl_id, hid_t_f *attr_id); /* MSB */ +H5_FCDLL int_f nh5aget_info_c (hid_t_f *loc_id, int_f *corder_valid, int_f *corder, + int_f *cset, hsize_t_f *data_size ); /* MSB */ +H5_FCDLL int_f nh5aget_info_by_idx_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen, + int_f *idx_type, int_f *order, hsize_t_f *n, hid_t_f *lapl_id, + int_f *corder_valid, int_f *corder, + int_f *cset, hsize_t_f *data_size ); /* MSB */ +H5_FCDLL int_f nh5aget_info_by_name_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen, + _fcd attr_name, size_t_f *attr_namelen, hid_t_f *lapl_id, + int_f *corder_valid, int_f *corder, + int_f *cset, hsize_t_f *data_size ); /* MSB */ +H5_FCDLL int_f nh5acreate_by_name_c(hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen, + _fcd attr_name, size_t_f *attr_namelen, hid_t_f *type_id, + hid_t_f *space_id, hid_t_f *acpl_id, hid_t_f *aapl_id, + hid_t_f *lapl_id, hid_t_f *attr_id ); /* MSB */ +H5_FCDLL int_f nh5aexists_c (hid_t_f *obj_id, _fcd name, size_t_f *namelen, hid_t_f *attr_exists); /* MSB */ +H5_FCDLL int_f nh5aexists_by_name_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen, _fcd attr_name, size_t_f *attr_namelen, + hid_t_f *lapl_id, int_f *attr_exists); /* MSB */ +H5_FCDLL int_f nh5aopen_by_name_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen, _fcd attr_name, size_t_f *attr_namelen, + hid_t_f *aapl_id, hid_t_f *lapl_id, hid_t_f *attr_id); /* MSB */ +H5_FCDLL int_f nh5arename_c( hid_t_f *loc_id, + _fcd old_attr_name, size_t_f *old_attr_namelen, + _fcd new_attr_name, size_t_f *new_attr_namelen); /* MSB */ /* * Functions form H5Tf.c file @@ -583,11 +661,15 @@ H5_FCDLL int_f nh5aget_name_c(hid_t_f *attr_id, size_t_f *size, _fcd buf); # define nh5tvlen_create_c H5_FC_FUNC_(h5tvlen_create_c, H5TVLEN_CREATE_C) # define nh5tis_variable_str_c H5_FC_FUNC_(h5tis_variable_str_c, H5TIS_VARIABLE_STR_C) # define nh5tget_member_class_c H5_FC_FUNC_(h5tget_member_class_c, H5TGET_MEMBER_CLASS_C) - +# define nh5tcommit_anon_c H5_FC_FUNC_(h5tcommit_anon_c, H5TCOMMIT_ANON_C) +# define nh5tdecode_c H5_FC_FUNC_(h5tdecode_c, H5TDECODE_C) +# define nh5tencode_c H5_FC_FUNC_(h5tencode_c, H5TENCODE_C) +# define nh5tget_create_plist_c H5_FC_FUNC_(h5tget_create_plist_c, H5TGET_CREATE_PLIST_C) +# define nh5tcompiler_conv_c H5_FC_FUNC_(h5tcompiler_conv_c, H5TCOMPILER_CONV_C) H5_FCDLL int_f nh5tcreate_c(int_f *class, size_t_f *size, hid_t_f *type_id); -H5_FCDLL int_f nh5topen_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *type_id); -H5_FCDLL int_f nh5tcommit_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *type_id); +H5_FCDLL int_f nh5topen_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *type_id, hid_t_f *tapl_id ); +H5_FCDLL int_f nh5tcommit_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *type_id, hid_t_f *lcpl_id, hid_t_f *tcpl_id, hid_t_f *tapl_id); H5_FCDLL int_f nh5tclose_c ( hid_t_f *type_id ); H5_FCDLL int_f nh5tequal_c ( hid_t_f *type1_id , hid_t_f *type2_id, int_f *c_flag); H5_FCDLL int_f nh5tcopy_c ( hid_t_f *type_id , hid_t_f *new_type_id); @@ -596,7 +678,7 @@ H5_FCDLL int_f nh5tget_order_c ( hid_t_f *type_id , int_f *order); H5_FCDLL int_f nh5tset_order_c ( hid_t_f *type_id , int_f *order); H5_FCDLL int_f nh5tget_size_c ( hid_t_f *type_id , size_t_f *size); H5_FCDLL int_f nh5tset_size_c ( hid_t_f *type_id , size_t_f *size); -H5_FCDLL int_f nh5tcommitted_c (hid_t_f *type_id); +H5_FCDLL int_f nh5tcommitted_c (hid_t_f *dtype_id); H5_FCDLL int_f nh5tget_precision_c ( hid_t_f *type_id , size_t_f *precision); H5_FCDLL int_f nh5tset_precision_c ( hid_t_f *type_id , size_t_f *precision); H5_FCDLL int_f nh5tget_offset_c ( hid_t_f *type_id , size_t_f *offset); @@ -641,7 +723,24 @@ H5_FCDLL int_f nh5tget_super_c ( hid_t_f *type_id , hid_t_f *base_type_id); H5_FCDLL int_f nh5tvlen_create_c ( hid_t_f *type_id , hid_t_f *vltype_id); H5_FCDLL int_f nh5tis_variable_str_c ( hid_t_f *type_id , int_f *flag ); H5_FCDLL int_f nh5tget_member_class_c ( hid_t_f *type_id , int_f *member_no, int_f *class ); +H5_FCDLL int_f nh5tcommit_anon_c(hid_t_f *loc_id, hid_t_f *dtype_id, hid_t_f *tcpl_id, hid_t_f *tapl_id); +H5_FCDLL int_f nh5tdecode_c ( _fcd buf, hid_t_f *obj_id ); +H5_FCDLL int_f nh5tencode_c (_fcd buf, hid_t_f *obj_id, size_t_f *nalloc ); +H5_FCDLL int_f nh5tget_create_plist_c ( hid_t_f *dtype_id, hid_t_f *dtpl_id); +H5_FCDLL int_f nh5tcompiler_conv_c ( hid_t_f *src_id, hid_t_f *dst_id, int_f *c_flag); + + +/* + * Functions from H5Of.c + */ + +# define nh5olink_c H5_FC_FUNC_(h5olink_c, H5OLINK_C) +# define nh5oopen_c H5_FC_FUNC_(h5oopen_c, H5OOPEN_C) + +H5_FCDLL int_f nh5oopen_c (hid_t_f *loc_id, _fcd name, size_t_f *namelen, hid_t_f *lapl_id, hid_t_f *obj_id); +H5_FCDLL int_f nh5olink_c (hid_t_f *object_id, hid_t_f *new_loc_id, _fcd name, size_t_f *namelen, + hid_t_f *lcpl_id, hid_t_f *lapl_id); /* * Functions from H5Pf.c */ @@ -768,7 +867,37 @@ H5_FCDLL int_f nh5tget_member_class_c ( hid_t_f *type_id , int_f *member_no, in # define nh5pset_fapl_multi_sc H5_FC_FUNC_(h5pset_fapl_multi_sc, H5PSET_FAPL_MULTI_SC) # define nh5pset_szip_c H5_FC_FUNC_(h5pset_szip_c, H5PSET_SZIP_C) # define nh5pall_filters_avail_c H5_FC_FUNC_(h5pall_filters_avail_c, H5PALL_FILTERS_AVAIL_C) - +# define nh5pget_attr_phase_change_c H5_FC_FUNC_(h5pget_attr_phase_change_c, H5PGET_ATTR_PHASE_CHANGE_C) /* MSB */ +# define nh5pset_attr_creation_order_c H5_FC_FUNC_(h5pset_attr_creation_order_c, H5PSET_ATTR_CREATION_ORDER_C) /* MSB */ +# define nh5pset_shared_mesg_nindexes_c H5_FC_FUNC_(h5pset_shared_mesg_nindexes_c, H5PSET_SHARED_MESG_NINDEXES_C) /* MSB */ +# define nh5pset_shared_mesg_index_c H5_FC_FUNC_(h5pset_shared_mesg_index_c,H5PSET_SHARED_MESG_INDEX_C) /* MSB */ +# define nh5pget_attr_creation_order_c H5_FC_FUNC_(h5pget_attr_creation_order_c,H5PGET_ATTR_CREATION_ORDER_C) /* MSB */ +# define nh5pset_libver_bounds_c H5_FC_FUNC_(h5pset_libver_bounds_c,H5PSET_LIBVER_BOUNDS_C) /* MSB */ +# define nh5pset_link_creation_order_c H5_FC_FUNC_(h5pset_link_creation_order_c, H5PSET_LINK_CREATION_ORDER_C) /* MSB */ +# define nh5pget_link_phase_change_c H5_FC_FUNC_(h5pget_link_phase_change_c, H5PGET_LINK_PHASE_CHANGE_C) /* MSB */ +# define nh5pget_obj_track_times_c H5_FC_FUNC_(h5pget_obj_track_times_c, H5PGET_OBJ_TRACK_TIMES_C) /* MSB */ +# define nh5pset_obj_track_times_c H5_FC_FUNC_(h5pset_obj_track_times_c, H5PSET_OBJ_TRACK_TIMES_C) /* MSB */ +# define nh5pset_create_inter_group_c H5_FC_FUNC_(h5pset_create_inter_group_c,H5PSET_CREATE_INTER_GROUP_C) /* MSB */ +# define nh5pget_create_inter_group_c H5_FC_FUNC_(h5pget_create_inter_group_c,H5PGET_CREATE_INTER_GROUP_C) /* MSB */ +# define nh5pget_link_creation_order_c H5_FC_FUNC_(h5pget_link_creation_order_c,H5PGET_LINK_CREATION_ORDER_C) /* MSB */ +# define nh5pset_char_encoding_c H5_FC_FUNC_(h5pset_char_encoding_c, H5PSET_CHAR_ENCODING_C) /* MSB */ +# define nh5pget_char_encoding_c H5_FC_FUNC_(h5pget_char_encoding_c, H5PGET_CHAR_ENCODING_C) /* MSB */ +# define nh5pset_copy_object_c H5_FC_FUNC_(h5pset_copy_object_c, H5PSET_COPY_OBJECT_C) /* MSB */ +# define nh5pget_copy_object_c H5_FC_FUNC_(h5pget_copy_object_c, H5PGET_COPY_OBJECT_C) /* MSB */ +# define nh5pget_data_transform_c H5_FC_FUNC_(h5pget_data_transform_c, H5PGET_DATA_TRANSFORM_C) /* MSB */ +# define nh5pset_data_transform_c H5_FC_FUNC_(h5pset_data_transform_c, H5PSET_DATA_TRANSFORM_C) /* MSB */ +# define nh5pget_local_heap_size_hint_c H5_FC_FUNC_(h5pget_local_heap_size_hint_c, H5PGET_LOCAL_HEAP_SIZE_HINT_C) /* MSB */ +# define nh5pget_est_link_info_c H5_FC_FUNC_(h5pget_est_link_info_c,H5PGET_EST_LINK_INFO_C) /* MSB */ +# define nh5pset_est_link_info_c H5_FC_FUNC_(h5pset_est_link_info_c,H5PSET_EST_LINK_INFO_C) /* MSB */ +# define nh5pset_local_heap_size_hint_c H5_FC_FUNC_(h5pset_local_heap_size_hint_c, H5PSET_LOCAL_HEAP_SIZE_HINT_C) /* MSB */ +# define nh5pset_link_phase_change_c H5_FC_FUNC_(h5pset_link_phase_change_c, H5PSET_LINK_PHASE_CHANGE_C) /* MSB */ +# define nh5pset_fapl_direct_c H5_FC_FUNC_(h5pset_fapl_direct_c, H5PSET_FAPL_DIRECT_C) /* MSB */ +# define nh5pget_fapl_direct_c H5_FC_FUNC_(h5pget_fapl_direct_c, H5PGET_FAPL_DIRECT_C) /* MSB */ +# define nh5pset_attr_phase_change_c H5_FC_FUNC_(h5pset_attr_phase_change_c, H5PSET_ATTR_PHASE_CHANGE_C) /* MSB */ +# define nh5pset_nbit_c H5_FC_FUNC_(h5pset_nbit_c, H5PSET_NBIT_C) /* MSB */ +# define nh5pset_scaleoffset_c H5_FC_FUNC_(h5pset_scaleoffset_c, H5PSET_SCALEOFFSET_C) /* MSB */ +# define nh5pset_nlinks_c H5_FC_FUNC_(h5pset_nlinks_c, H5PSET_NLINKS_C) /* MSB */ +# define nh5pget_nlinks_c H5_FC_FUNC_(h5pget_nlinks_c, H5PGET_NLINKS_C) /* MSB */ H5_FCDLL int_f nh5pcreate_c ( hid_t_f *class, hid_t_f *prp_id ); H5_FCDLL int_f nh5pclose_c ( hid_t_f *prp_id ); @@ -894,7 +1023,37 @@ H5_FCDLL int_f nh5pset_fapl_multi_sc ( hid_t_f *prp_id , int_f *flag); H5_FCDLL int_f nh5pset_szip_c ( hid_t_f *prp_id , int_f *options_mask, int_f *pixels_per_block); H5_FCDLL int_f nh5pall_filters_avail_c ( hid_t_f *prp_id , int_f *status); H5_FCDLL int_f nh5pfill_value_defined_c ( hid_t_f *prp_id , int_f *flag); - +H5_FCDLL int_f nh5pget_attr_phase_change_c (hid_t_f *ocpl_id, int_f *max_compact, int_f *min_dense ); /* MSB */ +H5_FCDLL int_f nh5pset_attr_creation_order_c(hid_t_f *ocpl_id, int_f *crt_order_flags ); /* MSB */ +H5_FCDLL int_f nh5pset_shared_mesg_nindexes_c(hid_t_f *plist_id, int_f *nindexes ); /* MSB */ +H5_FCDLL int_f nh5pset_shared_mesg_index_c(hid_t_f *fcpl_id, int_f *index_num, int_f *mesg_type_flags, int_f *min_mesg_size); /* MSB */ +H5_FCDLL int_f nh5pget_attr_creation_order_c(hid_t_f *ocpl_id, int_f *crt_order_flags); /* MSB */ +H5_FCDLL int_f nh5pset_libver_bounds_c(hid_t_f *fapl_id, int_f *low, int_f *high); /* MSB */ +H5_FCDLL int_f nh5pset_link_creation_order_c(hid_t_f *gcpl_id, int_f *crt_order_flags); /* MSB */ +H5_FCDLL int_f nh5pget_link_phase_change_c(hid_t_f *gcpl_id, int_f *max_compact, int_f *min_dense ); /* MSB */ +H5_FCDLL int_f nh5pget_obj_track_times_c(hid_t_f *plist_id, int_f *flag); /* MSB */ +H5_FCDLL int_f nh5pset_obj_track_times_c(hid_t_f *plist_id, int_f *flag); /* MSB */ +H5_FCDLL int_f nh5pset_create_inter_group_c(hid_t_f *lcpl_id, int_f *crt_intermed_group); /* MSB */ +H5_FCDLL int_f nh5pget_create_inter_group_c(hid_t_f *lcpl_id, int_f *crt_intermed_group); /* MSB */ +H5_FCDLL int_f nh5pget_link_creation_order_c(hid_t_f *gcpl_id, int_f *crt_order_flags); /* MSB */ +H5_FCDLL int_f nh5pset_char_encoding_c(hid_t_f *plist_id, int_f *encoding); /* MSB */ +H5_FCDLL int_f nh5pget_char_encoding_c(hid_t_f *plist_id, int_f *encoding); /* MSB */ +H5_FCDLL int_f nh5pset_copy_object_c(hid_t_f *ocp_plist_id, int_f *copy_options); /* MSB */ +H5_FCDLL int_f nh5pget_copy_object_c(hid_t_f *ocp_plist_id, int_f *copy_options); /* MSB */ +H5_FCDLL int_f nh5pget_data_transform_c(hid_t_f *plist_id, _fcd expression, int_f *expression_len, size_t_f *size); /* MSB */ +H5_FCDLL int_f nh5pset_data_transform_c(hid_t_f *plist_id, _fcd expression, int_f *expression_len); /* MSB */ +H5_FCDLL int_f nh5pget_local_heap_size_hint_c(hid_t_f *gcpl_id, size_t_f *size_hint); /* MSB */ +H5_FCDLL int_f nh5pget_est_link_info_c(hid_t_f *gcpl_id, int_f *est_num_entries, int_f *est_name_len); /* MSB */ +H5_FCDLL int_f nh5pset_local_heap_size_hint_c(hid_t_f *gcpl_id, size_t_f *size_hint); /* MSB */ +H5_FCDLL int_f nh5pset_est_link_info_c(hid_t_f *gcpl_id, int_f *est_num_entries, int_f *est_name_len); /* MSB */ +H5_FCDLL int_f nh5pset_link_phase_change_c(hid_t_f *gcpl_id, int_f *max_compact, int_f *min_dense ); /* MSB */ +H5_FCDLL int_f nh5pset_fapl_direct_c(hid_t_f *fapl_id, size_t_f *alignment, size_t_f *block_size, size_t_f *cbuf_size ); /* MSB */ +H5_FCDLL int_f nh5pget_fapl_direct_c(hid_t_f *fapl_id, size_t_f *alignment, size_t_f *block_size, size_t_f *cbuf_size ); /* MSB */ +H5_FCDLL int_f nh5pset_attr_phase_change_c (hid_t_f *ocpl_id, int_f *max_compact, int_f *min_dense ); /* MSB */ +H5_FCDLL int_f nh5pset_nbit_c(hid_t_f *plist_id ); /* MSB */ +H5_FCDLL int_f nh5pset_scaleoffset_c(hid_t_f *plist_id, int_f *scale_type, int_f *scale_factor ); /* MSB */ +H5_FCDLL int_f nh5pset_nlinks_c(hid_t_f *lapl_id, size_t_f *nlinks); /* MSB */ +H5_FCDLL int_f nh5pget_nlinks_c(hid_t_f *lapl_id, size_t_f *nlinks); /* MSB */ /* * Functions frome H5Rf.c */ @@ -904,6 +1063,8 @@ H5_FCDLL int_f nh5pfill_value_defined_c ( hid_t_f *prp_id , int_f *flag); # define nh5rdereference_object_c H5_FC_FUNC_(h5rdereference_object_c, H5RDEREFERENCE_OBJECT_C) # define nh5rget_region_region_c H5_FC_FUNC_(h5rget_region_region_c, H5RGET_REGION_REGION_C) # define nh5rget_object_type_obj_c H5_FC_FUNC_(h5rget_object_type_obj_c, H5RGET_OBJECT_TYPE_OBJ_C) +# define nh5rget_name_object_c H5_FC_FUNC_(h5rget_name_object_c, H5RGET_NAME_OBJECT_C) +# define nh5rget_name_region_c H5_FC_FUNC_(h5rget_name_region_c, H5RGET_NAME_REGION_C) H5_FCDLL int_f nh5rcreate_object_c (haddr_t_f *ref, hid_t_f *loc_id, _fcd name, int_f *namelen); @@ -912,7 +1073,8 @@ H5_FCDLL int_f nh5rdereference_region_c (hid_t_f *dset_id, int_f *ref, hid_t_f * H5_FCDLL int_f nh5rdereference_object_c (hid_t_f *dset_id, haddr_t_f *ref, hid_t_f *obj_id); H5_FCDLL int_f nh5rget_region_region_c (hid_t_f *dset_id, int_f *ref, hid_t_f *space_id); H5_FCDLL int_f nh5rget_object_type_obj_c (hid_t_f *dset_id, haddr_t_f *ref, int_f *obj_type); - +H5_FCDLL int_f nh5rget_name_object_c (hid_t_f *loc_id, haddr_t_f *ref, _fcd name, size_t_f *name_len, size_t_f *size_default); +H5_FCDLL int_f nh5rget_name_region_c (hid_t_f *loc_id, int_f *ref, _fcd name, size_t_f *name_len, size_t_f *size_default); /* * Functions from H5If.c */ @@ -968,10 +1130,10 @@ H5_FCDLL int_f nh5close_c(void); H5_FCDLL int_f nh5init_types_c(hid_t_f *types, hid_t_f * floatingtypes, hid_t_f * integertypes); H5_FCDLL int_f nh5close_types_c(hid_t_f *types, int_f *lentypes, hid_t_f * floatingtypes, int_f * floatinglen, hid_t_f * integertypes, int_f * integerlen); H5_FCDLL int_f nh5init_flags_c( int_f *h5d_flags, int_f *h5f_flags, - int_f *h5fd_flags, hid_t_f *h5fd_hid_flags, - int_f *h5g_flags, int_f *h5i_flags, - hid_t_f *h5p_flags, int_f *h5r_flags, int_f *h5s_flags, - int_f *h5t_flags, int_f *h5z_flags); + int_f *h5fd_flags, hid_t_f *h5fd_hid_flags, + int_f *h5g_flags, int_f *h5i_flags, int_f *h5l_flags, int_f *h5o_flags, + hid_t_f *h5p_flags, int_f *h5p_flags_int, int_f *h5r_flags, int_f *h5s_flags, + int_f *h5t_flags, int_f *h5z_flags, int_f *h5_generic_flags); H5_FCDLL int_f nh5init1_flags_c(int_f *h5lib_flags); H5_FCDLL int_f nh5get_libversion_c(int_f *majnum, int_f *minnum, int_f *relnum); H5_FCDLL int_f nh5check_version_c(int_f *majnum, int_f *minnum, int_f *relnum); @@ -991,4 +1153,55 @@ H5_FCDLL int_f nh5zfilter_avail_c (int_f *filter, int_f *flag); H5_FCDLL int_f nh5zget_filter_info_c (int_f *filter, int_f *flag); +/* + * Functions from H5Lf.c + */ +# define nh5lcopy_c H5_FC_FUNC_(h5lcopy_c, H5LCOPY_C) /*MSB*/ +# define nh5lcreate_external_c H5_FC_FUNC_(h5lcreate_external_c, H5LCREATE_EXTERNAL_C) /*MSB*/ +# define nh5lcreate_hard_c H5_FC_FUNC_(h5lcreate_hard_c, H5LCREATE_HARD_C) /*MSB*/ +# define nh5lcreate_soft_c H5_FC_FUNC_(h5lcreate_soft_c, H5LCREATE_SOFT_C) /*MSB*/ +# define nh5ldelete_c H5_FC_FUNC_(h5ldelete_c, H5LDELETE_C) /*MSB*/ +# define nh5ldelete_by_idx_c H5_FC_FUNC_(h5ldelete_by_idx_c, H5LDELETE_BY_IDX_C) /*MSB*/ +# define nh5lexists_c H5_FC_FUNC_(h5lexists_c, H5LEXISTS_C) /*MSB*/ +# define nh5lget_info_c H5_FC_FUNC_(h5lget_info_c, H5LGET_INFO_C) /*MSB*/ +# define nh5lget_info_by_idx_c H5_FC_FUNC_(h5lget_info_by_idx_c, H5LGET_INFO_BY_IDX_C) /*MSB*/ +# define nh5lis_registered_c H5_FC_FUNC_(h5lis_registered_c, H5LIS_REGISTERED_C) /*MSB*/ +# define nh5lmove_c H5_FC_FUNC_(h5lmove_c, H5LMOVE_C) /* MSB */ +# define nh5lget_name_by_idx_c H5_FC_FUNC_(h5lget_name_by_idx_c, H5LGET_NAME_BY_IDX_C) /* MSB */ +# define nh5lget_val_c H5_FC_FUNC_(h5lget_val_c, H5LGET_VAL_C) /* MSB */ + +H5_FCDLL int_f nh5lcopy_c(hid_t_f *src_loc_id, _fcd src_name, size_t_f *src_namelen, hid_t_f *dest_loc_id, + _fcd dest_name, size_t_f *dest_namelen, + hid_t_f *lcpl_id, hid_t_f *lapl_id); /*MSB*/ +H5_FCDLL int_f nh5lcreate_external_c(_fcd file_name, size_t_f *file_namelen, _fcd obj_name, size_t_f *obj_namelen, + hid_t_f *link_loc_id, _fcd link_name, size_t_f *link_namelen, + hid_t_f *lcpl_id, hid_t_f *lapl_id); /*MSB*/ +H5_FCDLL int_f nh5lcreate_hard_c(hid_t_f *obj_loc_id, _fcd obj_name, size_t_f *obj_namelen, + hid_t_f *link_loc_id, + _fcd link_name, size_t_f *link_namelen, + hid_t_f *lcpl_id, hid_t_f *lapl_id ); /*MSB*/ +H5_FCDLL int_f nh5lcreate_soft_c(_fcd target_path, size_t_f *target_path_len, + hid_t_f *link_loc_id, + _fcd link_name, size_t_f *link_name_len, + hid_t_f *lcpl_id, hid_t_f *lapl_id ); /*MSB*/ +H5_FCDLL int_f nh5ldelete_c( hid_t_f *loc_id, _fcd name, size_t_f *namelen, hid_t_f *lapl_id ); /*MSB*/ +H5_FCDLL int_f nh5ldelete_by_idx_c (hid_t_f *loc_id, _fcd group_name, size_t_f *group_namelen, + int_f *index_field, int_f *order, hsize_t_f *n, hid_t_f *lapl_id); /*MSB*/ +H5_FCDLL int_f nh5lexists_c (hid_t_f *loc_id, _fcd name, size_t_f *namelen, hid_t_f *lapl_id, hid_t_f *link_exists); /*MSB*/ +H5_FCDLL int_f nh5lget_info_c (hid_t_f *link_loc_id, _fcd link_name, size_t_f *link_namelen, + int_f *cset, int_f *corder, int_f *corder_valid, int_f *link_type, + int_f *address, hsize_t_f *link_len, + hid_t_f *lapl_id); /*MSB*/ +H5_FCDLL int_f nh5lget_info_by_idx_c(hid_t_f *loc_id, _fcd group_name, size_t_f *group_namelen, + int_f *index_field, int_f *order, hsize_t_f *n, + int_f *corder_valid, int_f *corder, int_f *cset, hsize_t_f *data_size, hid_t_f *lapl_id); /*MSB*/ +H5_FCDLL int_f nh5lis_registered_c(int_f *link_cls_id); /*MSB*/ +H5_FCDLL int_f nh5lmove_c(hid_t_f *src_loc_id, _fcd src_name, size_t_f *src_namelen, hid_t_f *dest_loc_id, + _fcd dest_name, size_t_f *dest_namelen, hid_t_f *lcpl_id, hid_t_f *lapl_id); /*MSB*/ +H5_FCDLL int_f nh5lget_name_by_idx_c(hid_t_f *loc_id, _fcd group_name, size_t_f *group_namelen, + int_f *index_field, int_f *order, hsize_t_f *n, + size_t_f *size, _fcd name, hid_t_f *lapl_id); /*MSB*/ +H5_FCDLL int_f nh5lget_val_c(hid_t_f *link_loc_id, _fcd link_name, size_t_f *link_namelen, size_t_f *size, + void *linkval_buff, hid_t_f *lapl_id) ; + #endif /* _H5f90proto_H */ diff --git a/fortran/src/HDF5.f90 b/fortran/src/HDF5.f90 index b24d295..04ad33d 100644 --- a/fortran/src/HDF5.f90 +++ b/fortran/src/HDF5.f90 @@ -13,18 +13,21 @@ ! access to either file, you may request a copy from help@hdfgroup.org. * ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! - MODULE HDF5 - USE H5GLOBAL - USE H5F - USE H5G - USE H5E - USE H5I - USE H5S - USE H5D - USE H5A - USE H5T - USE H5P - USE H5R - USE H5Z - USE H5LIB - END MODULE HDF5 +MODULE HDF5 + USE H5GLOBAL + USE H5F + USE H5G + USE H5E + USE H5I + USE H5L + USE H5S + USE H5D + USE H5A + USE H5T + USE H5O + USE H5P + USE H5R + USE H5Z + USE H5LIB + +END MODULE HDF5 diff --git a/fortran/src/HDF5mpio.f90 b/fortran/src/HDF5mpio.f90 index 95c6273..59ec309 100644 --- a/fortran/src/HDF5mpio.f90 +++ b/fortran/src/HDF5mpio.f90 @@ -19,10 +19,12 @@ USE H5E USE H5G USE H5I + USE H5L USE H5S USE H5D USE H5A USE H5T + USE H5O USE H5P USE H5FDMPIO USE H5R diff --git a/fortran/src/Makefile.am b/fortran/src/Makefile.am index a4f9025..4216f34 100644 --- a/fortran/src/Makefile.am +++ b/fortran/src/Makefile.am @@ -48,10 +48,10 @@ endif # Source files for the library. libhdf5_fortran_la_SOURCES=H5fortran_flags.f90 H5f90global.f90 \ H5fortran_types.f90 H5_ff.f90 H5Aff.f90 H5Dff.f90 H5Eff.f90 \ - H5Fff.f90 H5Gff.f90 H5Iff.f90 H5Pff.f90 H5Rff.f90 H5Sff.f90 \ + H5Fff.f90 H5Gff.f90 H5Iff.f90 H5Lff.f90 H5Off.f90 H5Pff.f90 H5Rff.f90 H5Sff.f90 \ H5Tff.f90 H5Zff.f90 \ H5f90kit.c H5_f.c H5Af.c H5Df.c H5Ef.c H5Ff.c H5Gf.c \ - H5If.c H5Pf.c H5Rf.c H5Sf.c H5Tf.c H5Zf.c \ + H5If.c H5Lf.c H5Of.c H5Pf.c H5Rf.c H5Sf.c H5Tf.c H5Zf.c \ $(PARALLEL_COND_SRC) # h5fc and libhdf5_fortran.settings are generated during configure. @@ -167,17 +167,19 @@ H5Eff.lo: $(srcdir)/H5Eff.f90 H5f90global.lo H5Fff.lo: $(srcdir)/H5Fff.f90 H5f90global.lo H5Gff.lo: $(srcdir)/H5Gff.f90 H5f90global.lo H5Iff.lo: $(srcdir)/H5Iff.f90 H5f90global.lo +H5Lff.lo: $(srcdir)/H5Lff.f90 H5f90global.lo +H5Off.lo: $(srcdir)/H5Off.f90 H5f90global.lo H5Pff.lo: $(srcdir)/H5Pff.f90 H5f90global.lo H5Rff.lo: $(srcdir)/H5Rff.f90 H5f90global.lo H5Sff.lo: $(srcdir)/H5Sff.f90 H5f90global.lo H5Tff.lo: $(srcdir)/H5Tff.f90 H5f90global.lo H5Zff.lo: $(srcdir)/H5Zff.f90 H5f90global.lo HDF5.lo: $(srcdir)/HDF5.f90 H5f90global.lo H5Aff.lo \ - H5Dff.lo H5Eff.lo H5Fff.lo H5Gff.lo H5Iff.lo \ + H5Dff.lo H5Eff.lo H5Fff.lo H5Gff.lo H5Iff.lo H5Lff.lo \ H5Pff.lo H5Rff.lo H5Sff.lo H5Tff.lo H5Zff.lo H5FDmpioff.lo: $(srcdir)/H5FDmpioff.f90 H5f90global.lo HDF5mpio.lo: $(srcdir)/H5FDmpioff.f90 H5f90global.lo H5Aff.lo \ - H5Dff.lo H5Eff.lo H5Fff.lo H5Gff.lo H5Iff.lo \ + H5Dff.lo H5Eff.lo H5Fff.lo H5Gff.lo H5Iff.lo H5Lff.lo \ H5Pff.lo H5Rff.lo H5Sff.lo H5Tff.lo H5Zff.lo H5FDmpioff.lo include $(top_srcdir)/config/conclude.am diff --git a/fortran/src/Makefile.in b/fortran/src/Makefile.in index a4145f4..523e703 100644 --- a/fortran/src/Makefile.in +++ b/fortran/src/Makefile.in @@ -78,19 +78,20 @@ LTLIBRARIES = $(lib_LTLIBRARIES) libhdf5_fortran_la_LIBADD = am__libhdf5_fortran_la_SOURCES_DIST = H5fortran_flags.f90 \ H5f90global.f90 H5fortran_types.f90 H5_ff.f90 H5Aff.f90 \ - H5Dff.f90 H5Eff.f90 H5Fff.f90 H5Gff.f90 H5Iff.f90 H5Pff.f90 \ - H5Rff.f90 H5Sff.f90 H5Tff.f90 H5Zff.f90 H5f90kit.c H5_f.c \ - H5Af.c H5Df.c H5Ef.c H5Ff.c H5Gf.c H5If.c H5Pf.c H5Rf.c H5Sf.c \ - H5Tf.c H5Zf.c HDF5.f90 H5FDmpiof.c HDF5mpio.f90 H5FDmpioff.f90 + H5Dff.f90 H5Eff.f90 H5Fff.f90 H5Gff.f90 H5Iff.f90 H5Lff.f90 \ + H5Off.f90 H5Pff.f90 H5Rff.f90 H5Sff.f90 H5Tff.f90 H5Zff.f90 \ + H5f90kit.c H5_f.c H5Af.c H5Df.c H5Ef.c H5Ff.c H5Gf.c H5If.c \ + H5Lf.c H5Of.c H5Pf.c H5Rf.c H5Sf.c H5Tf.c H5Zf.c HDF5.f90 \ + H5FDmpiof.c HDF5mpio.f90 H5FDmpioff.f90 @BUILD_PARALLEL_CONDITIONAL_FALSE@am__objects_1 = HDF5.lo @BUILD_PARALLEL_CONDITIONAL_TRUE@am__objects_1 = H5FDmpiof.lo \ @BUILD_PARALLEL_CONDITIONAL_TRUE@ HDF5mpio.lo H5FDmpioff.lo am_libhdf5_fortran_la_OBJECTS = H5fortran_flags.lo H5f90global.lo \ H5fortran_types.lo H5_ff.lo H5Aff.lo H5Dff.lo H5Eff.lo \ - H5Fff.lo H5Gff.lo H5Iff.lo H5Pff.lo H5Rff.lo H5Sff.lo H5Tff.lo \ - H5Zff.lo H5f90kit.lo H5_f.lo H5Af.lo H5Df.lo H5Ef.lo H5Ff.lo \ - H5Gf.lo H5If.lo H5Pf.lo H5Rf.lo H5Sf.lo H5Tf.lo H5Zf.lo \ - $(am__objects_1) + H5Fff.lo H5Gff.lo H5Iff.lo H5Lff.lo H5Off.lo H5Pff.lo H5Rff.lo \ + H5Sff.lo H5Tff.lo H5Zff.lo H5f90kit.lo H5_f.lo H5Af.lo H5Df.lo \ + H5Ef.lo H5Ff.lo H5Gf.lo H5If.lo H5Lf.lo H5Of.lo H5Pf.lo \ + H5Rf.lo H5Sf.lo H5Tf.lo H5Zf.lo $(am__objects_1) libhdf5_fortran_la_OBJECTS = $(am_libhdf5_fortran_la_OBJECTS) PROGRAMS = $(noinst_PROGRAMS) am_H5fortran_detect_OBJECTS = H5fortran_detect.$(OBJEXT) @@ -386,10 +387,10 @@ lib_LTLIBRARIES = libhdf5_fortran.la # Source files for the library. libhdf5_fortran_la_SOURCES = H5fortran_flags.f90 H5f90global.f90 \ H5fortran_types.f90 H5_ff.f90 H5Aff.f90 H5Dff.f90 H5Eff.f90 \ - H5Fff.f90 H5Gff.f90 H5Iff.f90 H5Pff.f90 H5Rff.f90 H5Sff.f90 \ + H5Fff.f90 H5Gff.f90 H5Iff.f90 H5Lff.f90 H5Off.f90 H5Pff.f90 H5Rff.f90 H5Sff.f90 \ H5Tff.f90 H5Zff.f90 \ H5f90kit.c H5_f.c H5Af.c H5Df.c H5Ef.c H5Ff.c H5Gf.c \ - H5If.c H5Pf.c H5Rf.c H5Sf.c H5Tf.c H5Zf.c \ + H5If.c H5Lf.c H5Of.c H5Pf.c H5Rf.c H5Sf.c H5Tf.c H5Zf.c \ $(PARALLEL_COND_SRC) @@ -541,6 +542,8 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Ff.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Gf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5If.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Lf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Of.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Pf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Rf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Sf.Plo@am__quote@ @@ -873,17 +876,19 @@ H5Eff.lo: $(srcdir)/H5Eff.f90 H5f90global.lo H5Fff.lo: $(srcdir)/H5Fff.f90 H5f90global.lo H5Gff.lo: $(srcdir)/H5Gff.f90 H5f90global.lo H5Iff.lo: $(srcdir)/H5Iff.f90 H5f90global.lo +H5Lff.lo: $(srcdir)/H5Lff.f90 H5f90global.lo +H5Off.lo: $(srcdir)/H5Off.f90 H5f90global.lo H5Pff.lo: $(srcdir)/H5Pff.f90 H5f90global.lo H5Rff.lo: $(srcdir)/H5Rff.f90 H5f90global.lo H5Sff.lo: $(srcdir)/H5Sff.f90 H5f90global.lo H5Tff.lo: $(srcdir)/H5Tff.f90 H5f90global.lo H5Zff.lo: $(srcdir)/H5Zff.f90 H5f90global.lo HDF5.lo: $(srcdir)/HDF5.f90 H5f90global.lo H5Aff.lo \ - H5Dff.lo H5Eff.lo H5Fff.lo H5Gff.lo H5Iff.lo \ + H5Dff.lo H5Eff.lo H5Fff.lo H5Gff.lo H5Iff.lo H5Lff.lo \ H5Pff.lo H5Rff.lo H5Sff.lo H5Tff.lo H5Zff.lo H5FDmpioff.lo: $(srcdir)/H5FDmpioff.f90 H5f90global.lo HDF5mpio.lo: $(srcdir)/H5FDmpioff.f90 H5f90global.lo H5Aff.lo \ - H5Dff.lo H5Eff.lo H5Fff.lo H5Gff.lo H5Iff.lo \ + H5Dff.lo H5Eff.lo H5Fff.lo H5Gff.lo H5Iff.lo H5Lff.lo \ H5Pff.lo H5Rff.lo H5Sff.lo H5Tff.lo H5Zff.lo H5FDmpioff.lo # lib/progs/tests targets recurse into subdirectories. build-* targets diff --git a/fortran/src/README_DEVELOPEMENT b/fortran/src/README_DEVELOPEMENT new file mode 100644 index 0000000..dc65f47 --- /dev/null +++ b/fortran/src/README_DEVELOPEMENT @@ -0,0 +1,36 @@ +Procedure to add a new function: + +(1) Edit the fortran/src/H5*ff.f90 file +(2) Edit the fortran/sr/H5*f.c file +(3) Edit the fortran/src/H5f90proto.h file + + + +Procedure: +(1) Find the struct name you are interested in: + (a) src/H5public.h if it is a generic type, i.e. H5_* + or + (b) src/H5*public.h if is a specific type, i.e. H5*_ + +(2) Put that structure into an array that will be passed to fortran in: + (a) fortran/src/H5_f.c (add to nh5init_flags_c subroutine) + (b) edit fortran/src/H5f90proto.h and edit nh5init_flags_c interface call + +(3) Edit the function call in fortran/src/H5_ff.f90 + (a) edit the call FUNCTION h5init_flags_c + (b) edit h5init_flags_c call in h5open_f to match the number of arguments passing + +(4) add the size of the array and array to fortran/src/H5f90global.f90 + - must match the size found it H5_f.c + +NOTE: To just add a default C value argument, do steps (2a) and (4) + +Adding a new file to the repository +------------------------------------- + +Add the name of the file to: + (1) Makefile.am located in the same directory as the newfile + (2) MANIFEST located in the top level directory + + +If you add a new file, be sure to add it to the MANIFEST located in the top directory |