summaryrefslogtreecommitdiffstats
path: root/fortran/src/H5Lff.F90
diff options
context:
space:
mode:
Diffstat (limited to 'fortran/src/H5Lff.F90')
-rw-r--r--fortran/src/H5Lff.F901478
1 files changed, 1478 insertions, 0 deletions
diff --git a/fortran/src/H5Lff.F90 b/fortran/src/H5Lff.F90
new file mode 100644
index 0000000..bc91072
--- /dev/null
+++ b/fortran/src/H5Lff.F90
@@ -0,0 +1,1478 @@
+!****h* ROBODoc/H5L
+!
+! NAME
+! MODULE H5L
+!
+! PURPOSE
+! This file contains Fortran interfaces for H5L functions.
+!
+! COPYRIGHT
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+! 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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! NOTES
+! _____ __ __ _____ ____ _____ _______ _ _ _______
+! |_ _| \/ | __ \ / __ \| __ \__ __|/\ | \ | |__ __|
+! **** | | | \ / | |__) | | | | |__) | | | / \ | \| | | | ****
+! **** | | | |\/| | ___/| | | | _ / | | / /\ \ | . ` | | | ****
+! **** _| |_| | | | | | |__| | | \ \ | |/ ____ \| |\ | | | ****
+! |_____|_| |_|_| \____/|_| \_\ |_/_/ \_\_| \_| |_|
+!
+! If you add a new H5L function you must add the function name to the
+! Windows dll file 'hdf5_fortrandll.def.in' in the fortran/src directory.
+! This is needed for Windows based operating systems.
+!
+!*****
+
+MODULE H5L
+
+ USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_PTR, C_FUNPTR, C_CHAR, C_INT64_T, C_INT
+ USE H5GLOBAL
+
+ IMPLICIT NONE
+
+!****t* H5L (F03)/h5l_info_t
+!
+! Fortran2003 Derived Type:
+!
+ TYPE, bind(c) :: union_t
+ INTEGER(haddr_t) :: address
+ INTEGER(size_t) :: val_size
+ END TYPE union_t
+
+ TYPE, bind(c) :: h5l_info_t
+ INTEGER(c_int) :: type ! H5L_type_t type
+! LOGICAL(c_bool) :: corder_valid ! hbool_t corder_valid
+ INTEGER(c_int64_t) :: corder ! int64_t corder;
+ INTEGER(c_int) :: cset ! H5T_cset_t cset;
+ TYPE(union_t) :: u
+ END TYPE h5l_info_t
+
+!*****
+
+!type specifies the link class. Valid values include the following:
+! H5L_TYPE_HARD Hard link
+! H5L_TYPE_SOFT Soft link
+! H5L_TYPE_EXTERNAL External link
+! H5L_TYPE_ERROR Error
+!cset specifies the character set in which the link name is encoded. Valid values include the following:
+! H5T_CSET_ASCII US ASCII
+! H5T_CSET_UTF8 UTF-8 Unicode encoding
+
+CONTAINS
+
+!
+!****s* H5L/h5lcopy_f
+!
+! 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 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+! lcpl_id - Link creation property list identifier
+! lapl_id - Link access property list identifier
+!
+! AUTHOR
+! M. Scot Breitenfeld
+! February 27, 2008
+!
+! SOURCE
+ SUBROUTINE h5lcopy_f(src_loc_id, src_name, dest_loc_id, dest_name, hdferr, &
+ lcpl_id, lapl_id)
+ 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
+
+ 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) BIND(C,name='h5lcopy_c')
+ IMPORT :: c_char
+ IMPORT :: HID_T, SIZE_T
+ IMPLICIT NONE
+ INTEGER(HID_T), INTENT(IN) :: src_loc_id
+ CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: src_name
+ INTEGER(HID_T), INTENT(IN) :: dest_loc_id
+ CHARACTER(KIND=C_CHAR), DIMENSION(*), 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
+
+!
+!****s* H5L/h5ldelete_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 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+! lapl_id - Link access property list identifier
+!
+! AUTHOR
+! M. Scot Breitenfeld
+! January, 2008
+!
+! SOURCE
+ SUBROUTINE h5ldelete_f(loc_id, name, hdferr, lapl_id)
+ 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
+
+ INTERFACE
+ INTEGER FUNCTION h5ldelete_c(loc_id, name, namelen, lapl_id_default) BIND(C,name='h5ldelete_c')
+ IMPORT :: c_char
+ IMPORT :: HID_T, SIZE_T
+ IMPLICIT NONE
+ INTEGER(HID_T), INTENT(IN) :: loc_id
+ CHARACTER(KIND=C_CHAR), DIMENSION(*), 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
+
+!
+!****s* H5L/H5Lcreate_soft_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 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+! lcpl_id - Link creation property list identifier.
+! lapl_id - Link access property list identifier.
+!
+! AUTHOR
+! M. Scot Breitenfeld
+! February 20, 2008
+!
+! SOURCE
+ SUBROUTINE h5lcreate_soft_f(target_path, link_loc_id, link_name, hdferr, lcpl_id, lapl_id)
+ 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
+
+ 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 ) BIND(C,NAME='h5lcreate_soft_c')
+ IMPORT :: c_char
+ IMPORT :: HID_T, SIZE_T
+ IMPLICIT NONE
+ CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: target_path
+ INTEGER(SIZE_T) :: target_path_len
+ INTEGER(HID_T), INTENT(IN) :: link_loc_id
+ CHARACTER(KIND=C_CHAR), DIMENSION(*), 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
+
+!
+!****s* H5L/H5Lcreate_hard_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 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+! lcpl_id - Link creation property list identifier.
+! lapl_id - Link access property list identifier.
+!
+! AUTHOR
+! M. Scot Breitenfeld
+! February 27, 2008
+!
+! SOURCE
+ SUBROUTINE h5lcreate_hard_f(obj_loc_id, obj_name, link_loc_id, link_name, hdferr, lcpl_id, lapl_id)
+ 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
+
+ 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) BIND(C,NAME='h5lcreate_hard_c')
+ IMPORT :: c_char
+ IMPORT :: HID_T, SIZE_T
+ IMPLICIT NONE
+ INTEGER(HID_T), INTENT(IN) :: obj_loc_id
+ CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: obj_name
+ INTEGER(HID_T), INTENT(IN) :: link_loc_id
+ CHARACTER(KIND=C_CHAR), DIMENSION(*), 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
+
+!
+!****s* H5L/H5Lcreate_external_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 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+! lcpl_id - Link creation property list identifier.
+! lapl_id - Link access property list identifier.
+!
+! AUTHOR
+! M. Scot Breitenfeld
+! February 27, 2008
+! SOURCE
+ SUBROUTINE h5lcreate_external_f(file_name, obj_name, link_loc_id, link_name, hdferr, lcpl_id, lapl_id)
+ 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
+
+ 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) BIND(C,NAME='h5lcreate_external_c')
+ IMPORT :: c_char
+ IMPORT :: HID_T, SIZE_T
+ IMPLICIT NONE
+ CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: file_name
+ CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: obj_name
+ INTEGER(HID_T), INTENT(IN) :: link_loc_id
+ CHARACTER(KIND=C_CHAR), DIMENSION(*), 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
+
+!
+!****s* H5L/h5ldelete_by_idx_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 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+! lapl_id - Link access property list
+!
+! AUTHOR
+! M. Scot Breitenfeld
+! February 29, 2008
+! SOURCE
+ SUBROUTINE h5ldelete_by_idx_f(loc_id, group_name, index_field, order, n, hdferr, lapl_id)
+ 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
+
+ INTERFACE
+ INTEGER FUNCTION h5ldelete_by_idx_c(loc_id, group_name, group_namelen, index_field, order, n, lapl_id_default) &
+ BIND(C,NAME='h5ldelete_by_idx_c')
+ IMPORT :: c_char
+ IMPORT :: HID_T, SIZE_T, HSIZE_T
+ IMPLICIT NONE
+ INTEGER(HID_T), INTENT(IN) :: loc_id
+ CHARACTER(KIND=C_CHAR), DIMENSION(*), 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
+
+!
+!****s* H5L/H5Lexists_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 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+! lapl_id - Link access property list identifier.
+!
+! AUTHOR
+! M. Scot Breitenfeld
+! February 29, 2008
+!
+! SOURCE
+ SUBROUTINE h5lexists_f(loc_id, name, link_exists, hdferr, lapl_id)
+ 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
+
+ INTERFACE
+ INTEGER FUNCTION h5lexists_c(loc_id, name, namelen, lapl_id_default, link_exists_c) &
+ BIND(C,NAME='h5lexists_c')
+ IMPORT :: c_char
+ IMPORT :: HID_T, SIZE_T
+ IMPLICIT NONE
+ INTEGER(HID_T), INTENT(IN) :: loc_id
+ CHARACTER(KIND=C_CHAR), DIMENSION(*), 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
+
+!
+!****s* H5L/h5lget_info_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_TYPE_HARD_F - Hard link
+! H5L_TYPE_SOFT_F - Soft link
+! H5L_TYPE_EXTERNAL_F - External link
+! H5L_TYPE_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, e.g.,
+! the length of the name of the pointed-to object with a null terminator.
+! hdferr - Returns 0 if successful and -1 if fails
+!
+! OPTIONAL PARAMETERS
+! lapl_id - Link access property list
+!
+! AUTHOR
+! M. Scot Breitenfeld
+! February 29, 2008
+!
+! HISTORY
+! Changed the link_type names to match those in C (bug 1720) from,
+! H5L_LINK_HARD_F, H5L_LINK_SOFT_F,H5L_LINK_EXTERNAL_F,H5L_LINK_ERROR_F
+! to
+! H5L_TYPE_HARD_F, H5L_TYPE_SOFT_F,H5L_TYPE_EXTERNAL_F,H5L_TYPE_ERROR_F
+! MSB January 8, 2010.
+!
+! SOURCE
+ SUBROUTINE h5lget_info_f(link_loc_id, link_name, &
+ cset, corder, f_corder_valid, link_type, address, val_size, &
+ hdferr, lapl_id)
+ 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_TYPE_HARD_F - Hard link
+ ! H5L_TYPE_SOFT_F - Soft link
+ ! H5L_TYPE_EXTERNAL_F - External link
+ ! H5L_TYPE_ERROR _F - Error
+ INTEGER(HADDR_T), INTENT(OUT) :: address ! If the link is a hard link, address specifies the file address that the link points to
+ INTEGER(SIZE_T), INTENT(OUT) :: val_size ! If the link is a symbolic link, val_size will be the length of the link value, e.g.,
+ ! the length of the name of the pointed-to object with a null terminator.
+ 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
+
+ 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) BIND(C,NAME='h5lget_info_c')
+ IMPORT :: c_char
+ IMPORT :: HID_T, SIZE_T, HADDR_T
+ IMPLICIT NONE
+ INTEGER(HID_T), INTENT(IN) :: link_loc_id
+ CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: link_name
+ INTEGER, INTENT(OUT) :: cset
+ INTEGER, INTENT(OUT) :: corder
+ INTEGER, INTENT(OUT) :: link_type
+ INTEGER(HADDR_T), INTENT(OUT) :: address
+ INTEGER(SIZE_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
+
+!
+!****s* H5L/h5lget_info_by_idx_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
+! 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, e.g.,
+! the length of the name of the pointed-to object with a null terminator.
+! hdferr - Returns 0 if successful and -1 if fails
+!
+! OPTIONAL PARAMETERS
+! lapl_id - Link access property list
+!
+! AUTHOR
+! M. Scot Breitenfeld
+! February 29, 2008
+!
+! HISTORY
+! Changed the link_type names to match those in C (bug 1720) from,
+! H5L_LINK_HARD_F, H5L_LINK_SOFT_F,H5L_LINK_EXTERNAL_F,H5L_LINK_ERROR_F
+! to
+! H5L_TYPE_HARD_F, H5L_TYPE_SOFT_F,H5L_TYPE_EXTERNAL_F,H5L_TYPE_ERROR_F
+! MSB January 8, 2010.
+!
+! SOURCE
+ SUBROUTINE h5lget_info_by_idx_f(loc_id, group_name, index_field, order, n, &
+ link_type, f_corder_valid, corder, cset, address, val_size, hdferr, lapl_id)
+ 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, INTENT(OUT) :: link_type ! Specifies the link class:
+ ! H5L_TYPE_HARD_F - Hard link
+ ! H5L_TYPE_SOFT_F - Soft link
+ ! H5L_TYPE_EXTERNAL_F - External link
+ ! H5L_TYPE_ERROR _F - Error
+ 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(HADDR_T), INTENT(OUT) :: address ! If the link is a hard link, address specifies the file address that the link points to
+ INTEGER(SIZE_T), INTENT(OUT) :: val_size ! If the link is a symbolic link, val_size will be the length of the link value, e.g.,
+ ! the length of the name of the pointed-to object with a null terminator.
+ 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, &
+ link_type, corder_valid, corder, cset, address, val_size, lapl_id_default) &
+ BIND(C,NAME='h5lget_info_by_idx_c')
+ IMPORT :: c_char
+ IMPORT :: HID_T, SIZE_T, HSIZE_T, HADDR_T
+ IMPLICIT NONE
+ INTEGER(HID_T), INTENT(IN) :: loc_id
+ CHARACTER(KIND=C_CHAR), DIMENSION(*), 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, INTENT(OUT) :: link_type
+ INTEGER :: corder_valid
+ INTEGER, INTENT(OUT) :: corder
+ INTEGER, INTENT(OUT) :: cset
+ INTEGER(HADDR_T), INTENT(OUT) :: address
+ INTEGER(SIZE_T), INTENT(OUT) :: val_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, &
+ link_type, corder_valid, corder, cset, address, val_size, lapl_id_default)
+
+ f_corder_valid =.FALSE.
+ IF (corder_valid .EQ. 1) f_corder_valid =.TRUE.
+
+ END SUBROUTINE h5lget_info_by_idx_f
+
+!
+!****s* H5L/h5lis_registered_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
+!
+! AUTHOR
+! M. Scot Breitenfeld
+! February 29, 2008
+!
+! SOURCE
+ SUBROUTINE h5lis_registered_f(link_cls_id, registered, hdferr)
+ 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
+!*****
+ INTERFACE
+ INTEGER FUNCTION h5lis_registered_c(link_cls_id) BIND(C,NAME='h5lis_registered_c')
+ IMPLICIT NONE
+ 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
+
+!
+!****s* H5L/h5lmove_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:
+! 0 on success and -1 on failure
+!
+! 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.
+!
+! AUTHOR
+! M. Scot Breitenfeld
+! March 3, 2008
+!
+! SOURCE
+ SUBROUTINE h5lmove_f(src_loc_id, src_name, dest_loc_id, dest_name, hdferr, lcpl_id, lapl_id)
+ 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
+
+ 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) BIND(C,NAME='h5lmove_c')
+ IMPORT :: c_char
+ IMPORT :: HID_T, SIZE_T
+ IMPLICIT NONE
+ INTEGER(HID_T), INTENT(IN) :: src_loc_id
+
+ CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: src_name
+ INTEGER(SIZE_T) :: src_namelen
+ INTEGER(HID_T), INTENT(IN) :: dest_loc_id
+ CHARACTER(KIND=C_CHAR), DIMENSION(*), 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
+
+!
+!****s* H5L/h5lget_name_by_idx_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
+! hdferr - Returns 0 if successful and -1 if fails
+!
+! OPTIONAL PARAMETERS
+! lapl_id - List access property list identifier.
+! size - Maximum number of characters of link value to be returned.
+!
+! AUTHOR
+! M. Scot Breitenfeld
+! March 10, 2008
+!
+! SOURCE
+ SUBROUTINE h5lget_name_by_idx_f(loc_id, group_name, index_field, order, n, &
+ name, hdferr, size, lapl_id)
+ 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
+ CHARACTER(LEN=*), INTENT(OUT) :: name ! Buffer in which link value is returned
+ INTEGER, INTENT(OUT) :: hdferr ! Error code:
+ ! 0 on success and -1 on failure
+!*****
+ INTEGER(SIZE_T) :: group_namelen
+ INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list
+ INTEGER(HID_T) :: lapl_id_default
+ INTEGER(SIZE_T), OPTIONAL, INTENT(OUT) :: size ! Indicates the size, in the number of characters, of the link
+ INTEGER(SIZE_T) :: size_default
+
+ INTERFACE
+ INTEGER FUNCTION h5lget_name_by_idx_c(loc_id, group_name, group_namelen, index_field, order, n, &
+ size_default, name, lapl_id_default) BIND(C,NAME='h5lget_name_by_idx_c')
+ IMPORT :: c_char
+ IMPORT :: HID_T, SIZE_T, HSIZE_T
+ IMPLICIT NONE
+ INTEGER(HID_T), INTENT(IN) :: loc_id
+
+ CHARACTER(KIND=C_CHAR), DIMENSION(*), 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) :: size_default
+ CHARACTER(KIND=C_CHAR), DIMENSION(*), 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
+
+ size_default = LEN(name)
+
+ hdferr = h5lget_name_by_idx_c(loc_id, group_name, group_namelen, index_field, order, n, &
+ size_default, name, lapl_id_default)
+
+ IF(PRESENT(size)) size = size_default
+
+
+ END SUBROUTINE h5lget_name_by_idx_f
+
+
+! HAS PROBLEM WITH void pointer in C
+!!$!
+!!$!****s* H5L/
+!!$!
+!!$! 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.
+!!$!
+!!$! AUTHOR
+!!$! M. Scot Breitenfeld
+!!$! March 3, 2008
+!!$!
+!!$! HISTORY N/A
+!!$!
+!!$!
+!!$! SOURCE
+!!$ SUBROUTINE h5lget_val_by_idx_f(loc_id, group_name, index_field, order, n, &
+!!$ f_corder_valid, corder, cset, data_size, hdferr, lapl_id)
+!!$ 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
+!!$
+!!$ 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(KIND=C_CHAR), DIMENSION(*), 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
+
+!!$!
+!!$!****s* H5L/h5lget_val_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.
+!!$!
+!!$! AUTHOR
+!!$! M. Scot Breitenfeld
+!!$! March 3, 2008
+!!$! SOURCE
+!!$ SUBROUTINE h5lget_val_f(link_loc_id, link_name, size, linkval_buff, &
+!!$ hdferr, lapl_id)
+!!$ 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(KIND=C_CHAR), DIMENSION(*), 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
+
+!!$!
+!!$!****s* H5L/H5Lregistered_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
+!!$!
+!!$! AUTHOR
+!!$! M. Scot Breitenfeld
+!!$! February 29, 2008
+!!$!
+!!$! HISTORY N/A
+!!$!
+!!$!
+!!$! SOURCE
+!!$ SUBROUTINE H5Lregistered_f(version, class_id, comment, create_func, &
+!!$ move_func, copy_func, trav_func, del_func, query_func, hdferr)
+!!$ 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
+!!$
+!!$ 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(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: comment ! Comment for debugging
+!!$ CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: create_func ! Callback during link creation
+!!$ CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: move_func ! Callback after moving link
+!!$ CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: copy_func ! Callback after copying link
+!!$ CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: trav_func ! The main traversal function
+!!$ CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: del_func ! Callback for link deletion
+!!$ CHARACTER(KIND=C_CHAR), DIMENSION(*), 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
+
+!****s* H5L (F03)/h5literate_f
+!
+! NAME
+! h5literate_f
+!
+! PURPOSE
+! Iterates through links in a group.
+!
+! Inputs:
+! group_id - Identifier specifying subject group
+! index_type - Type of index which determines the order:
+! H5_INDEX_NAME_F - Alpha-numeric index on name
+! H5_INDEX_CRT_ORDER_F - Index on creation order
+! order - Order within index:
+! H5_ITER_INC_F - Increasing order
+! H5_ITER_DEC_F - Decreasing order
+! H5_ITER_NATIVE_F - Fastest available order
+! idx - IN: Iteration position at which to start
+! op - Callback function passing data regarding the link to the calling application
+! op_data - User-defined pointer to data required by the application for its processing of the link
+!
+! Outputs:
+! idx - OUT: Position at which an interrupted iteration may be restarted
+! return_value - Success: The return value of the first operator that
+! returns non-zero, or zero if all members were
+! processed with no operator returning non-zero.
+!
+! Failure: Negative if something goes wrong within the
+! library, or the negative value returned by one
+! of the operators.
+!
+! hdferr - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+! M. Scot Breitenfeld
+! July 8, 2008
+!
+! Fortran2003 Interface:
+ SUBROUTINE h5literate_f(group_id, index_type, order, idx, op, op_data, return_value, hdferr)
+ USE, INTRINSIC :: ISO_C_BINDING
+ IMPLICIT NONE
+ INTEGER(HID_T) , INTENT(IN) :: group_id
+ INTEGER , INTENT(IN) :: index_type
+ INTEGER , INTENT(IN) :: order
+ INTEGER(HSIZE_T), INTENT(INOUT) :: idx
+ TYPE(C_FUNPTR) , INTENT(IN) :: op
+ TYPE(C_PTR) , INTENT(IN) :: op_data
+ INTEGER , INTENT(OUT) :: return_value
+ INTEGER , INTENT(OUT) :: hdferr
+!*****
+ INTERFACE
+ INTEGER FUNCTION h5literate_c(group_id, index_type, order, idx, op, op_data) &
+ BIND(C, NAME='h5literate_c')
+ IMPORT :: c_ptr, c_funptr
+ IMPORT :: HID_T, HSIZE_T
+ IMPLICIT NONE
+ INTEGER(HID_T), INTENT(IN) :: group_id
+ INTEGER, INTENT(IN) :: index_type
+ INTEGER, INTENT(IN) :: order
+ INTEGER(HSIZE_T), INTENT(INOUT) :: idx
+ TYPE(C_FUNPTR), VALUE :: op
+ TYPE(C_PTR), VALUE :: op_data
+ END FUNCTION h5literate_c
+ END INTERFACE
+
+ return_value = h5literate_c(group_id, index_type, order, idx, op, op_data)
+
+ IF(return_value.GE.0)THEN
+ hdferr = 0
+ ELSE
+ hdferr = -1
+ END IF
+
+ END SUBROUTINE h5literate_f
+
+!****s* H5L (F03)/h5literate_by_name_f
+!
+! NAME
+! h5literate_by_name_f
+!
+! PURPOSE
+! Iterates through links in a group.
+!
+! Inputs:
+! loc_id - File or group identifier specifying location of subject group
+! group_name - Name of subject group
+! index_type - Type of index which determines the order:
+! H5_INDEX_NAME_F - Alpha-numeric index on name
+! H5_INDEX_CRT_ORDER_F - Index on creation order
+! order - Order within index:
+! H5_ITER_INC_F - Increasing order
+! H5_ITER_DEC_F - Decreasing order
+! H5_ITER_NATIVE_F - Fastest available order
+! idx - IN: Iteration position at which to start
+! op - Callback function passing data regarding the link to the calling application
+! op_data - User-defined pointer to data required by the application for its processing of the link
+!
+! Outputs:
+! idx - OUT: Position at which an interrupted iteration may be restarted
+! return_value - Success: The return value of the first operator that
+! returns non-zero, or zero if all members were
+! processed with no operator returning non-zero.
+!
+! Failure: Negative if something goes wrong within the
+! library, or the negative value returned by one
+! of the operators.
+!
+! hdferr - Returns 0 if successful and -1 if fails
+!
+! Optional parameters:
+! lapl_id - Link access property list
+!
+! AUTHOR
+! M. Scot Breitenfeld
+! Augest 18, 2008
+!
+! Fortran2003 Interface:
+ SUBROUTINE h5literate_by_name_f(loc_id, group_name, index_type, order, &
+ idx, op, op_data, return_value, hdferr, lapl_id)
+ USE, INTRINSIC :: ISO_C_BINDING
+ IMPLICIT NONE
+ 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(INOUT) :: idx
+ TYPE(C_FUNPTR) , INTENT(IN) :: op
+ TYPE(C_PTR) , INTENT(IN) :: op_data
+ INTEGER , INTENT(OUT) :: return_value
+ INTEGER , INTENT(OUT) :: hdferr
+ INTEGER(HID_T) , INTENT(IN), OPTIONAL :: lapl_id
+!*****
+ INTEGER(HID_T) :: lapl_id_default
+ INTEGER(SIZE_T) :: namelen
+
+ INTERFACE
+ INTEGER FUNCTION h5literate_by_name_c(loc_id, name, namelen, index_type, order,&
+ idx, op, op_data, lapl_id_default) BIND(C, NAME='h5literate_by_name_c')
+ IMPORT :: c_char, c_ptr, c_funptr
+ IMPORT :: HID_T, SIZE_T, HSIZE_T
+ IMPLICIT NONE
+ INTEGER(HID_T) , INTENT(IN) :: loc_id
+ CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: name
+ INTEGER(SIZE_T) , INTENT(IN) :: namelen
+ INTEGER , INTENT(IN) :: index_type
+ INTEGER , INTENT(IN) :: order
+ INTEGER(HSIZE_T), INTENT(INOUT) :: idx
+ TYPE(C_FUNPTR), VALUE :: op
+ TYPE(C_PTR), VALUE :: op_data
+ INTEGER(HID_T) , INTENT(IN) :: lapl_id_default
+ END FUNCTION
+ END INTERFACE
+
+ namelen = LEN(group_name)
+ lapl_id_default = H5P_DEFAULT_F
+ IF(PRESENT(lapl_id)) lapl_id_default = lapl_id
+
+ return_value = h5literate_by_name_c(loc_id, group_name, namelen, index_type, order, idx, op, op_data, lapl_id_default)
+
+ IF(return_value.GE.0)THEN
+ hdferr = 0
+ ELSE
+ hdferr = -1
+ END IF
+
+ END SUBROUTINE h5literate_by_name_f
+
+END MODULE H5L