summaryrefslogtreecommitdiffstats
path: root/fortran/src/H5Eff_F03.f90
diff options
context:
space:
mode:
Diffstat (limited to 'fortran/src/H5Eff_F03.f90')
-rw-r--r--fortran/src/H5Eff_F03.f90248
1 files changed, 248 insertions, 0 deletions
diff --git a/fortran/src/H5Eff_F03.f90 b/fortran/src/H5Eff_F03.f90
new file mode 100644
index 0000000..e9eeac9
--- /dev/null
+++ b/fortran/src/H5Eff_F03.f90
@@ -0,0 +1,248 @@
+!****h* ROBODoc/H5E (F03)
+!
+! NAME
+! H5L_PROVISIONAL
+!
+! FILE
+! src/fortran/src/H5Eff_F03.f90
+!
+! PURPOSE
+!
+! This file contains Fortran 90 and Fortran 2003 interfaces for H5E functions.
+! It contains the same functions as H5Eff_DEPRECIATE.f90 but includes the
+! Fortran 2003 functions and the interface listings. This file will be compiled
+! instead of H5Eff_DEPRECIATE.f90 if Fortran 2003 functions are enabled.
+!
+!
+! 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
+! *** IMPORTANT ***
+! If you add a new H5E function to the module you must add the function name
+! to the Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
+! This is needed for Windows based operating systems.
+!
+!*****
+
+MODULE H5E_PROVISIONAL
+
+ USE H5GLOBAL
+
+CONTAINS
+
+ INTEGER FUNCTION h5eprint_def() bind(C)
+
+ USE ISO_C_BINDING
+ IMPLICIT NONE
+ INTEGER :: hdferr
+
+ PRINT*,'Inside h5eprint_def'
+! STOP
+
+!!$ CALL h5eprint_f(hdferr)
+!!$ h5eprint_def = hdferr
+
+ END FUNCTION h5eprint_def
+
+!****s* H5E/h5eset_auto2_f
+!
+! NAME
+! h5eset_auto2_f
+!
+! PURPOSE
+! Returns settings for automatic error stack traversal function and its data.
+!
+! INPUTS
+! printflag - Flag to turn automatic error printing on or off;
+! possible values are:
+! printon (1)
+! printoff(0)
+! estack_id - Error stack identifier.
+! func - Function to be called upon an error condition.
+! client_data - Data passed to the error function
+!
+! OUTPUTS
+! hdferr - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+! M. Scot Breitenfeld
+! July 10, 2009
+!
+! SOURCE
+ SUBROUTINE h5eset_auto_f(printflag, hdferr, estack_id, func, client_data)
+ USE ISO_C_BINDING
+ INTEGER , INTENT(IN) :: printflag
+ INTEGER , INTENT(OUT) :: hdferr
+ INTEGER(HID_T), INTENT(IN) , OPTIONAL :: estack_id
+ TYPE(C_FUNPTR), INTENT(IN) , OPTIONAL :: func
+ TYPE(C_PTR) , INTENT(IN) , OPTIONAL :: client_data
+!*****
+ INTEGER(HID_T) :: estack_id_default
+ TYPE(C_FUNPTR) :: func_default
+ TYPE(C_PTR) :: client_data_default
+ INTERFACE
+ INTEGER FUNCTION h5eset_auto2_c(printflag, estack_id, func, client_data)
+ USE ISO_C_BINDING
+ USE H5GLOBAL
+ !DEC$IF DEFINED(HDF5F90_WINDOWS)
+ !DEC$ATTRIBUTES C,reference,decorate,alias:'H5ESET_AUTO2_C'::h5eset_auto2_c
+ !DEC$ENDIF
+ INTEGER :: printflag
+ INTEGER(HID_T) :: estack_id
+!!$ TYPE(C_FUNPTR) :: func
+!!$ TYPE(C_PTR), VALUE :: client_data
+ TYPE(C_FUNPTR), VALUE :: func
+ TYPE(C_PTR), VALUE :: client_data
+ END FUNCTION h5eset_auto2_c
+ END INTERFACE
+
+ estack_id_default = -1
+ func_default = C_NULL_FUNPTR
+ client_data_default = C_NULL_PTR
+
+ IF(PRESENT(estack_id)) estack_id_default = estack_id
+ IF(PRESENT(func)) func_default = func
+ IF(PRESENT(client_data)) client_data_default = client_data
+
+ hdferr = h5eset_auto2_c(printflag, estack_id_default, func_default, client_data_default)
+ END SUBROUTINE h5eset_auto_f
+
+!****s* H5E/h5eget_auto_f
+!
+! NAME
+! h5eget_auto_f
+!
+! PURPOSE
+! Returns the settings for the automatic error stack traversal function and its data.
+!
+! INPUTS
+! estack_id - Error stack identifier. H5E_DEFAULT_F indicates the current stack.
+! OUTPUTS
+! func - The function currently set to be called upon an error condition.
+! client_data - Data currently set to be passed to the error function.
+! hdferr - Returns 0 if successful and -1 if fails.
+!
+! AUTHOR
+! M. Scot Breitenfeld
+! July 10, 2009
+!
+! SOURCE
+ SUBROUTINE h5eget_auto_f(estack_id, op, client_data, hdferr)
+ USE ISO_C_BINDING
+ IMPLICIT NONE
+ INTEGER(HID_T), INTENT(IN) :: estack_id
+!!$ TYPE(C_FUNPTR) :: op_f
+!!$ TYPE(C_PTR) :: client_data_f
+ TYPE(C_FUNPTR) :: op
+ TYPE(C_PTR), VALUE :: client_data
+ INTEGER, INTENT(OUT) :: hdferr
+!*****
+ INTEGER :: ret_func2
+ !INTEGER(C_INT), DIMENSION(:), POINTER :: ptr_data
+ INTEGER, DIMENSION(1:1) :: array_shape
+ TYPE(C_PTR), TARGET :: f_ptr1
+ INTEGER(C_INT) :: ptr_data
+ INTEGER(C_INT) :: i
+ TYPE(C_PTR) :: test
+ INTEGER, POINTER :: a
+
+ INTEGER, TARGET :: j
+ TYPE(C_PTR) :: f_ptr2
+
+ INTERFACE
+ INTEGER FUNCTION h5eget_auto_c(estack_id, op, client_data, ret_func2)
+ USE ISO_C_BINDING
+ USE H5GLOBAL
+ IMPLICIT NONE
+ !DEC$IF DEFINED(HDF5F90_WINDOWS)
+ !DEC$ATTRIBUTES C,reference,decorate,alias:'H5EGET_AUTO_C'::h5eget_auto_c
+ !DEC$ENDIF
+ INTEGER(HID_T) :: estack_id
+ TYPE(C_FUNPTR) :: op
+ TYPE(C_PTR) :: client_data
+ INTEGER :: ret_func2
+ END FUNCTION h5eget_auto_c
+
+!!$ TYPE(C_PTR) FUNCTION h5eget_auto_c2(estack_id, op, ret_func2)
+!!$ USE ISO_C_BINDING
+!!$ USE H5GLOBAL
+!!$ IMPLICIT NONE
+!!$ !DEC$IF DEFINED(HDF5F90_WINDOWS)
+!!$ !DEC$ATTRIBUTES C,reference,decorate,alias:'H5EGET_AUTO_C'::h5eget_auto_c
+!!$ !DEC$ENDIF
+!!$ INTEGER(HID_T) :: estack_id
+!!$ TYPE(C_FUNPTR) :: op
+!!$ INTEGER :: ret_func2
+!!$ END FUNCTION h5eget_auto_c2
+
+!!$ SUBROUTINE process_buffer(estack_id, buffer)
+!!$ USE, INTRINSIC :: ISO_C_BINDING
+!!$ USE H5GLOBAL
+!!$ INTEGER(HID_T) :: estack_id
+!!$ TYPE(C_PTR) :: buffer
+!!$ END SUBROUTINE process_buffer
+
+ END INTERFACE
+
+! j = -9999
+
+
+ f_ptr2 = c_loc(j)
+! CALL process_buffer(estack_id,f_ptr2)
+
+ hdferr = h5eget_auto_c(estack_id, op, f_ptr2, ret_func2)
+
+!!!!! PRINT*,c_associated(f_ptr2)
+!!$ hdferr = h5eget_auto_c(estack_id, op, client_data, ret_func2)
+
+ PRINT*,'fortran',j
+ stop
+
+! client_data = h5eget_auto_c2(estack_id, op, ret_func2)
+
+! PRINT*,'Is client_data associated',C_associated(client_data)
+! PRINT*,'Is op_data associated',C_associated(op)
+
+! ALLOCATE(i(1:1))
+! CALL c_f_pointer(f_ptr2,a,[1])
+! CALL c_f_pointer(f_ptr2,i)
+! PRINT*,i
+! PRINT*,"Buffer in (F) = ", a(1)
+
+! stop
+
+! ALLOCATE(ptr_data(1:2))
+! ptr_data = 0
+! array_shape(1) = 1
+! CALL C_F_POINTER(client_data, ptr_data, array_shape)
+! CALL C_F_POINTER(f_ptr2, i,(/ 1 /))
+
+! ptr_data => f_ptr1(1)
+
+! PRINT*,'value in fortran',i
+
+
+! Check to see if the user created their own function,
+! otherwise we have to create a fortran version of the default
+
+!!$ IF(ret_func2.EQ.0)THEN
+!!$ op = c_funloc(h5eprint_def)
+!!$ END IF
+
+ END SUBROUTINE h5eget_auto_f
+
+END MODULE H5E_PROVISIONAL