summaryrefslogtreecommitdiffstats
path: root/HDF5Examples/FORTRAN/H5G/h5ex_g_iterate.F90
diff options
context:
space:
mode:
Diffstat (limited to 'HDF5Examples/FORTRAN/H5G/h5ex_g_iterate.F90')
-rw-r--r--HDF5Examples/FORTRAN/H5G/h5ex_g_iterate.F90115
1 files changed, 115 insertions, 0 deletions
diff --git a/HDF5Examples/FORTRAN/H5G/h5ex_g_iterate.F90 b/HDF5Examples/FORTRAN/H5G/h5ex_g_iterate.F90
new file mode 100644
index 0000000..ca43463
--- /dev/null
+++ b/HDF5Examples/FORTRAN/H5G/h5ex_g_iterate.F90
@@ -0,0 +1,115 @@
+!************************************************************
+!
+! This example shows how to iterate over group members using
+! H5Literate.
+!
+!************************************************************
+MODULE g_iterate
+
+ USE HDF5
+ USE ISO_C_BINDING
+ IMPLICIT NONE
+
+CONTAINS
+
+!************************************************************
+!
+! Operator function. Prints the name and type of the object
+! being examined.
+!
+! ************************************************************
+
+ INTEGER FUNCTION op_func(loc_id, name, info, operator_data) bind(C)
+
+ USE HDF5
+ USE ISO_C_BINDING
+ IMPLICIT NONE
+
+ INTEGER(HID_T), VALUE :: loc_id
+ CHARACTER(LEN=1), DIMENSION(1:10) :: name ! must have LEN=1 for bind(C) strings
+ TYPE(C_PTR) :: info
+ TYPE(C_PTR) :: operator_data
+
+ INTEGER :: status, i, len
+
+ TYPE(H5O_info_t), TARGET :: infobuf
+ TYPE(C_PTR) :: ptr
+ CHARACTER(LEN=10) :: name_string
+
+ !
+ ! Get type of the object and display its name and type.
+ ! The name of the object is passed to this FUNCTION by
+ ! the Library.
+ !
+
+ DO i = 1, 10
+ name_string(i:i) = name(i)(1:1)
+ ENDDO
+
+ CALL H5Oget_info_by_name_f(loc_id, name_string, infobuf, status)
+
+ ! Include the string up to the C NULL CHARACTER
+ len = 0
+ DO
+ IF(name_string(len+1:len+1).EQ.C_NULL_CHAR.OR.len.GE.10) EXIT
+ len = len + 1
+ ENDDO
+
+ IF(infobuf%type.EQ.H5O_TYPE_GROUP_F)THEN
+ WRITE(*,*) " Group: ", name_string(1:len)
+ ELSE IF(infobuf%type.EQ.H5O_TYPE_DATASET_F)THEN
+ WRITE(*,*) " Dataset: ", name_string(1:len)
+ ELSE IF(infobuf%type.EQ.H5O_TYPE_NAMED_DATATYPE_F)THEN
+ WRITE(*,*) " Datatype: ", name_string(1:len)
+ ELSE
+ WRITE(*,*) " Unknown: ", name_string(1:len)
+ ENDIF
+
+ op_func = 0 ! return successful
+
+ END FUNCTION op_func
+
+END MODULE g_iterate
+
+
+PROGRAM main
+
+ USE HDF5
+ USE ISO_C_BINDING
+ USE g_iterate
+
+ IMPLICIT NONE
+
+ CHARACTER(LEN=17), PARAMETER :: filename = "h5ex_g_iterate.h5"
+ INTEGER(HID_T) :: file ! Handle
+ INTEGER :: status
+ TYPE(C_FUNPTR) :: funptr
+ TYPE(C_PTR) :: ptr
+ INTEGER(hsize_t) :: idx
+ INTEGER :: ret_value
+ !
+ ! Initialize FORTRAN interface.
+ !
+ CALL h5open_f(status)
+ !
+ ! Open file.
+ !
+ CALL H5Fopen_f(filename, H5F_ACC_RDONLY_F, file, status)
+ !
+ ! Begin iteration.
+ !
+ WRITE(*,'(A)') "Objects in root group:"
+
+ idx = 0
+ funptr = C_FUNLOC(op_func) ! call back function
+ ptr = C_NULL_PTR
+
+ CALL H5Literate_f(file, H5_INDEX_NAME_F, H5_ITER_NATIVE_F, idx, funptr, ptr, ret_value, status)
+
+ !
+ ! Close and release resources.
+ !
+ CALL H5Fclose_f(file, status)
+
+END PROGRAM main
+