! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
!   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 H5F functions.
! 
      MODULE H5F
      USE H5GLOBAL
 
        CONTAINS
          
!----------------------------------------------------------------------
! Name:		h5fcreate_f 
!
! Purpose:	Creates HDF5 files. 
!
! Inputs:  
!		name		- name of the file to create
!		access_flags	- File access flags. Allowable values are: 
!				  H5F_ACC_TRUNC_F 
!				  H5F_ACC_EXCL_F 
! Outputs:  
!		file_id		- file identifier
!		hdferr:		- error code		
!				 	Success:  0
!				 	Failure: -1   
! Optional parameters:
!		creation_prp	- file creation property list identifier
!		access_prp	- file 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).  February 28, 2001 
!
! Comment:		
!----------------------------------------------------------------------
          SUBROUTINE h5fcreate_f(name, access_flags, file_id, hdferr, &
                                 creation_prp, access_prp)
!
!This definition is needed for Windows DLLs
!DEC$if defined(BUILD_HDF5_DLL)
!DEC$attributes dllexport :: h5fcreate_f
!DEC$endif
!
           
            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
            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: access_prp
                                                   ! File access property list
                                                   ! identifier
            INTEGER(HID_T) :: creation_prp_default 
            INTEGER(HID_T) :: access_prp_default
            INTEGER :: namelen ! Length of the name character string

!            INTEGER, EXTERNAL :: h5fcreate_c
!  Interface is needed for MS FORTRAN
!
            INTERFACE
              INTEGER FUNCTION h5fcreate_c(name, namelen, access_flags, &
                               creation_prp_default, access_prp_default, file_id)
              USE H5GLOBAL
              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
              !MS$ATTRIBUTES C,reference,alias:'_H5FCREATE_C':: h5fcreate_c
              !DEC$ ENDIF
              !DEC$ATTRIBUTES reference :: name 
              CHARACTER(LEN=*), INTENT(IN) :: name
              INTEGER, INTENT(IN) :: access_flags
              INTEGER(HID_T), INTENT(OUT) :: file_id
              INTEGER(HID_T), INTENT(IN) :: creation_prp_default
              INTEGER(HID_T), INTENT(IN) :: access_prp_default
              INTEGER :: namelen
              END FUNCTION h5fcreate_c
            END INTERFACE
  
            creation_prp_default = H5P_DEFAULT_F
            access_prp_default = H5P_DEFAULT_F

            if (present(creation_prp)) creation_prp_default = creation_prp 
            if (present(access_prp))   access_prp_default   = access_prp 
            namelen = LEN(name)
            hdferr = h5fcreate_c(name, namelen, access_flags, &
                     creation_prp_default, access_prp_default, file_id) 

          END SUBROUTINE h5fcreate_f
          
!----------------------------------------------------------------------
! Name:		h5fflush_f 
!
! Purpose:	Flushes all buffers associated with a file to disk	
!
! Inputs:  
!		object_id	- identifier of object used to identify 
!				  the file. 
!		scope		- specifies the scope of the flushing action. 
!				  Possible values are:
!				  H5F_SCOPE_GLOBAL_F
!				  H5F_SCOPE_LOCAL_F
! Outputs:  
!		hdferr:		- error code		
!				 	Success:  0
!				 	Failure: -1   
! Optional parameters:
!		creation_prp	- file creation property list identifier
!		access_prp	- file 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).  February 28, 2001 
!
! Comment:		
!----------------------------------------------------------------------
          SUBROUTINE h5fflush_f(object_id, scope, hdferr)
!
!This definition is needed for Windows DLLs
!DEC$if defined(BUILD_HDF5_DLL)
!DEC$attributes dllexport :: h5fflush_f
!DEC$endif
!
           
            IMPLICIT NONE
            INTEGER(HID_T), INTENT(IN) :: object_id !identifier for any object
                                                    !associate with a file, 
                                                    !including the file itself,
                                                    !a dataset, a group, an
                                                    !attribute, or a named
                                                    !data type

            INTEGER, INTENT(IN) :: scope            !scope of the flushing
                                                    !action, possible values 
                                                    !are: H5F_SCOPE_GLOBAL_F
                                                    ! which flushes the entire
                                                    !virtual file, 
                                                    !and H5F_SCOPE_LOCAL_F
                                                    !which flushes only the 
                                                    !specified file.

            INTEGER, INTENT(OUT) :: hdferr          ! Error code 

!            INTEGER, EXTERNAL :: h5fflush_c
!  MS FORTRAN needs explicit interface for C functions called here.
!
            INTERFACE
              INTEGER FUNCTION h5fflush_c(object_id, scope)
              USE H5GLOBAL
              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
              !MS$ATTRIBUTES C,reference,alias:'_H5FFLUSH_C':: h5fflush_c
              !DEC$ ENDIF
              INTEGER(HID_T), INTENT(IN) :: object_id
              INTEGER, INTENT(IN) :: scope
              END FUNCTION h5fflush_c
            END INTERFACE

           hdferr = h5fflush_c(object_id, scope) 

          END SUBROUTINE h5fflush_f

!----------------------------------------------------------------------
! Name:		h5fmount_f 
!
! Purpose:	Mounts a file. 	
!
! Inputs:  
!		loc_id		- the identifier for of file or group in 
!				  which name is defined
!		name		- the name of the group onto which the file 
!				  specified by child_id is to be mounted. 
!		child_id	- the identifier of the file to be mounted. 
! Outputs:  
!		hdferr:		- error code		
!				 	Success:  0
!				 	Failure: -1   
! Optional parameters:
!		access_prp	- the identifier of the property list to be used
!
! 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 
!
! Comment:		
!----------------------------------------------------------------------
 
          SUBROUTINE h5fmount_f(loc_id, name, child_id, hdferr, access_prp)
!
!This definition is needed for Windows DLLs
!DEC$if defined(BUILD_HDF5_DLL)
!DEC$attributes dllexport :: h5fmount_f
!DEC$endif
!
           
            IMPLICIT NONE
            INTEGER(HID_T), INTENT(IN) :: loc_id   ! Identifier for file or group 
                                                   ! in which dsetname is defined 
            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of the group
            INTEGER(HID_T), INTENT(IN) :: child_id ! File identifier for the
                                                   ! file to be mounted 
            INTEGER, INTENT(OUT) :: hdferr         ! Error code 
            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: access_prp
                                                   ! File access property list
                                                   ! identifier
            INTEGER(HID_T) :: access_prp_default 
            INTEGER :: namelen ! Length of the name character string
  
!            INTEGER, EXTERNAL :: h5fmount_c
!  Interface is needed for MS FORTRAN
!
            INTERFACE
              INTEGER FUNCTION h5fmount_c(loc_id, name, namelen, &
                                          child_id, access_prp_default)
              USE H5GLOBAL
              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
              !MS$ATTRIBUTES C,reference,alias:'_H5FMOUNT_C':: h5fmount_c
              !DEC$ ENDIF
              !DEC$ATTRIBUTES reference :: name 
              INTEGER(HID_T), INTENT(IN) :: loc_id 
              CHARACTER(LEN=*), INTENT(IN) :: name 
              INTEGER(HID_T), INTENT(IN) :: child_id 
              INTEGER(HID_T), INTENT(IN) :: access_prp_default
              INTEGER :: namelen 
              END FUNCTION h5fmount_c
            END INTERFACE

            access_prp_default = H5P_DEFAULT_F
            if (present(access_prp))   access_prp_default   = access_prp 
            namelen = LEN(name)
            hdferr = h5fmount_c(loc_id, name, namelen, child_id, access_prp_default) 
                      
          END SUBROUTINE h5fmount_f


!----------------------------------------------------------------------
! Name:		h5funmount_f 
!
! Purpose:	Unmounts a file. 	
!
! Inputs:  
!		loc_id		- the identifier for of file or group in 
!				  which name is defined
!		name		- the name of the mount point
! Outputs:  
!		hdferr:		- error code		
!				 	Success:  0
!				 	Failure: -1   
! Optional parameters:
!				NONE
!
! 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 
!
! Comment:		
!----------------------------------------------------------------------

          SUBROUTINE h5funmount_f(loc_id, name, hdferr)
!
!This definition is needed for Windows DLLs
!DEC$if defined(BUILD_HDF5_DLL)
!DEC$attributes dllexport :: h5funmount_f
!DEC$endif
!
           
            IMPLICIT NONE
            INTEGER(HID_T), INTENT(IN) :: loc_id   ! Identifier for file or group 
                                                   ! at which the specified file 
                                                   ! is to be unmounted
            CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the mount point
            INTEGER, INTENT(OUT) :: hdferr         ! Error code 
            INTEGER :: namelen ! Length of the name character string
  
!            INTEGER, EXTERNAL :: h5fumount_c
!  Interface is needed for MS FORTRAN
!
            INTERFACE
              INTEGER FUNCTION h5funmount_c(loc_id, name, namelen)
              USE H5GLOBAL
              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
              !MS$ATTRIBUTES C,reference,alias:'_H5FUNMOUNT_C':: h5funmount_c
              !DEC$ ENDIF
              !DEC$ATTRIBUTES reference :: name 
              INTEGER(HID_T), INTENT(IN) :: loc_id 
              CHARACTER(LEN=*), INTENT(IN) :: name 
              INTEGER :: namelen 
              END FUNCTION h5funmount_c
            END INTERFACE
  
            namelen = LEN(name)
            hdferr = h5funmount_c(loc_id, name, namelen) 
    
          END SUBROUTINE h5funmount_f
          
!----------------------------------------------------------------------
! Name:		h5fopen_f 
!
! Purpose:	Opens HDF5 file. 
!
! Inputs:  
!		name		- name of the file to acecss
!		access_flags	- File access flags. Allowable values are: 
!				  H5F_ACC_RDWR_F 
!				  H5F_ACC_RDONLY_F 
! Outputs:  
!		file_id		- file identifier
!		hdferr:		- error code		
!				 	Success:  0
!				 	Failure: -1   
! Optional parameters:
!		access_prp	- file 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).  February 28, 2001 
!
! Comment:		
!----------------------------------------------------------------------
          SUBROUTINE h5fopen_f(name, access_flags, file_id, hdferr, &
                               access_prp)
!
!This definition is needed for Windows DLLs
!DEC$if defined(BUILD_HDF5_DLL)
!DEC$attributes dllexport :: h5fopen_f
!DEC$endif
!
           
            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) :: access_prp
                                                   ! File access property list
                                                   ! identifier
            INTEGER(HID_T) :: access_prp_default 
            INTEGER :: namelen ! Length of the name character string

!            INTEGER, EXTERNAL :: h5fopen_c
!  MS FORTRAN needs explicit interface for C functions called here.
!
            INTERFACE
              INTEGER FUNCTION h5fopen_c(name, namelen, access_flags, &
                               access_prp_default, file_id)
              USE H5GLOBAL
              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
              !MS$ATTRIBUTES C,reference,alias:'_H5FOPEN_C':: h5fopen_c
              !DEC$ ENDIF
              !DEC$ATTRIBUTES reference :: name
              CHARACTER(LEN=*), INTENT(IN) :: name
              INTEGER :: namelen
              INTEGER, INTENT(IN) :: access_flags
              INTEGER(HID_T), INTENT(IN) :: access_prp_default
              INTEGER(HID_T), INTENT(OUT) :: file_id
              END FUNCTION h5fopen_c
            END INTERFACE
  
            access_prp_default = H5P_DEFAULT_F
            if (present(access_prp))   access_prp_default   = access_prp 
            namelen = LEN(name)
            hdferr = h5fopen_c(name, namelen, access_flags, &
                               access_prp_default, file_id) 

          END SUBROUTINE h5fopen_f
          
!----------------------------------------------------------------------
! Name:		h5freopen_f 
!
! Purpose:	Reopens HDF5 file. 
!
! Inputs:  
!		file_id		- identifier of a file for which an 
!				  additional identifier is required
! Outputs:  
!		ret_file_id	- new file identifier
!		hdferr:		- error code		
!				 	Success:  0
!				 	Failure: -1   
! Optional parameters:
!				NONE
!
! 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 
!
! Comment:		
!----------------------------------------------------------------------

          SUBROUTINE h5freopen_f(file_id, ret_file_id, hdferr)
!
!This definition is needed for Windows DLLs
!DEC$if defined(BUILD_HDF5_DLL)
!DEC$attributes dllexport :: h5freopen_f
!DEC$endif
!
           
            IMPLICIT NONE
            INTEGER(HID_T), INTENT(IN) :: file_id      ! File identifier 
            INTEGER(HID_T), INTENT(OUT) :: ret_file_id ! New File identifier 
            INTEGER, INTENT(OUT) :: hdferr             ! Error code 

!            INTEGER, EXTERNAL :: h5freopen_c
!  MS FORTRAN needs explicit interface for C functions called here.
!
            INTERFACE
              INTEGER FUNCTION h5freopen_c(file_id, ret_file_id)
              USE H5GLOBAL
              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
              !MS$ATTRIBUTES C,reference,alias:'_H5FREOPEN_C':: h5freopen_c
              !DEC$ ENDIF
              INTEGER(HID_T), INTENT(IN) :: file_id
              INTEGER(HID_T), INTENT(OUT) :: ret_file_id
              END FUNCTION h5freopen_c
            END INTERFACE

            hdferr = h5freopen_c(file_id, ret_file_id) 
          
          END SUBROUTINE h5freopen_f
          
!----------------------------------------------------------------------
! Name:		h5fget_create_plist_f
!
! Purpose:	Returns a file creation property list identifier.	
!
! Inputs:  
!		file_id		- identifier of a file to get 
!				  get creation property list of 
! Outputs:  
!		prop_id 	- creation property list identifier
!		hdferr:		- error code		
!				 	Success:  0
!				 	Failure: -1   
! Optional parameters:
!				NONE
!
! 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 
!
! Comment:		
!----------------------------------------------------------------------
          
          SUBROUTINE h5fget_create_plist_f(file_id, prop_id, hdferr)
!
!This definition is needed for Windows DLLs
!DEC$if defined(BUILD_HDF5_DLL)
!DEC$attributes dllexport :: h5fget_create_plist_f
!DEC$endif
!
           
            IMPLICIT NONE
            INTEGER(HID_T), INTENT(IN) :: file_id    ! File identifier 
            INTEGER(HID_T), INTENT(OUT) :: prop_id   ! File creation property
                                                     ! list identifier 
            INTEGER, INTENT(OUT) :: hdferr           ! Error code 

!            INTEGER, EXTERNAL :: h5fget_create_plist_c
!  MS FORTRAN needs explicit interface for C functions called here.
!
            INTERFACE
              INTEGER FUNCTION h5fget_create_plist_c(file_id, prop_id)
              USE H5GLOBAL
              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
!MS$ATTRIBUTES C,reference,alias:'_H5FGET_CREATE_PLIST_C':: h5fget_create_plist_c
              !DEC$ ENDIF
              INTEGER(HID_T), INTENT(IN) :: file_id
              INTEGER(HID_T), INTENT(OUT) :: prop_id
              END FUNCTION h5fget_create_plist_c
            END INTERFACE
  
            hdferr = h5fget_create_plist_c(file_id, prop_id) 

          END SUBROUTINE h5fget_create_plist_f
          
!----------------------------------------------------------------------
! Name:		h5fget_access_plist_f
!
! Purpose:	Returns a file access property list identifier.	
!
! Inputs:  
!		file_id		- identifier of a file to get 
!				  get creation property list of 
! Outputs:  
!		access_id 	- access property list identifier
!		hdferr:		- error code		
!				 	Success:  0
!				 	Failure: -1   
! Optional parameters:
!				NONE
!
! 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 
!
! Comment:		
!----------------------------------------------------------------------

          SUBROUTINE h5fget_access_plist_f(file_id, access_id, hdferr)
!
!This definition is needed for Windows DLLs
!DEC$if defined(BUILD_HDF5_DLL)
!DEC$attributes dllexport :: h5fget_access_plist_f
!DEC$endif
!
           
            IMPLICIT NONE
            INTEGER(HID_T), INTENT(IN) :: file_id      ! File identifier 
            INTEGER(HID_T), INTENT(OUT) :: access_id   ! File access property
                                                       ! list identifier 
            INTEGER, INTENT(OUT) :: hdferr             ! Error code 

!            INTEGER, EXTERNAL :: h5fget_access_plist_c
!  MS FORTRAN needs explicit interface for C functions called here.
!
            INTERFACE
              INTEGER FUNCTION h5fget_access_plist_c(file_id, access_id)
              USE H5GLOBAL
              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
!MS$ATTRIBUTES C,reference,alias:'_H5FGET_CREATE_PLIST_C':: h5fget_access_plist_c
              !DEC$ ENDIF
              INTEGER(HID_T), INTENT(IN) :: file_id
              INTEGER(HID_T), INTENT(OUT) :: access_id
              END FUNCTION h5fget_access_plist_c
            END INTERFACE
  
  
            hdferr = h5fget_access_plist_c(file_id, access_id) 

          END SUBROUTINE h5fget_access_plist_f
          
!----------------------------------------------------------------------
! Name:		h5fis_hdf5_f
!
! Purpose:	Determines whether a file is in the HDF5 format. 
!
! Inputs:  
!		name		- name of the file to check
! Outputs:  
!		status		- indicates if file is and HDF5 file
!		hdferr:		- error code		
!				 	Success:  0
!				 	Failure: -1   
! Optional parameters:
!				NONE
!
! 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 
!
! Comment:		
!----------------------------------------------------------------------
 
          SUBROUTINE h5fis_hdf5_f(name, status, hdferr)
!
!This definition is needed for Windows DLLs
!DEC$if defined(BUILD_HDF5_DLL)
!DEC$attributes dllexport :: h5fis_hdf5_f
!DEC$endif
!
           
            IMPLICIT NONE
            CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the file
            LOGICAL, INTENT(OUT) :: status         ! Indicates if file
                                                   ! is an HDF5 file
            INTEGER, INTENT(OUT) :: hdferr         ! Error code 
            INTEGER :: namelen ! Length of the name character string
            INTEGER :: flag    ! "TRUE/FALSE" flag from C routine
                               ! to define status value. 

!            INTEGER, EXTERNAL :: h5fis_hdf5_c
!  MS FORTRAN needs explicit interface for C functions called here.
!
            INTERFACE
              INTEGER FUNCTION h5fis_hdf5_c(name, namelen, flag)
              USE H5GLOBAL
              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
              !MS$ATTRIBUTES C,reference,alias:'_H5FIS_HDF5_C':: h5fis_hdf5_c
              !DEC$ ENDIF
              !DEC$ATTRIBUTES reference :: name
              CHARACTER(LEN=*), INTENT(IN) :: name
              INTEGER :: namelen
              INTEGER :: flag
              END FUNCTION h5fis_hdf5_c
            END INTERFACE
  
            namelen = LEN(name)
            hdferr = h5fis_hdf5_c(name, namelen, flag) 
            status = .TRUE.
            if (flag .EQ. 0) status = .FALSE.

          END SUBROUTINE h5fis_hdf5_f
          
!----------------------------------------------------------------------
! Name:		h5fclose_f
!
! Purpose:	Closes HDF5 file.
!
! Inputs:  
!		file_id		- file identifier
! Outputs:  
!		hdferr:		- error code		
!				 	Success:  0
!				 	Failure: -1   
! Optional parameters:
!				NONE
!
! 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 
!
! Comment:		
!----------------------------------------------------------------------
          
          SUBROUTINE h5fclose_f(file_id, hdferr)
!
!This definition is needed for Windows DLLs
!DEC$if defined(BUILD_HDF5_DLL)
!DEC$attributes dllexport :: h5fclose_f
!DEC$endif
!

            IMPLICIT NONE
            INTEGER(HID_T), INTENT(IN) :: file_id ! File identifier
            INTEGER, INTENT(OUT) :: hdferr        ! Error code

!            INTEGER, EXTERNAL :: h5fclose_c
!  MS FORTRAN needs explicit interface for C functions called here.
!
            INTERFACE
              INTEGER FUNCTION h5fclose_c(file_id)
              USE H5GLOBAL
              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
              !MS$ATTRIBUTES C,reference,alias:'_H5FCLOSE_C':: h5fclose_c
              !DEC$ ENDIF
              INTEGER(HID_T), INTENT(IN) :: file_id
              END FUNCTION h5fclose_c
            END INTERFACE

            hdferr = h5fclose_c(file_id)

          END SUBROUTINE h5fclose_f

!----------------------------------------------------------------------
! Name:		h5fget_obj_count_f
!
! Purpose:	Gets number of the objects open within a file
!
! Inputs:  
!		file_id		- file identifier
!               obj_type        - type of the object; possible values are:
!                                 H5F_OBJ_FILE_F 
!                                 H5F_OBJ_DATASET_F 
!                                 H5F_OBJ_GROUP_F 
!                                 H5F_OBJ_DATATYPE_F 
!                                 H5F_OBJ_ALL_F 
! Outputs:  
!               obj_count       - number of open objects
!		hdferr:		- error code		
!				 	Success:  0
!				 	Failure: -1   
! Optional parameters:
!				NONE
!
! Programmer:	Elena Pourmal
!		September 30, 2002
!
! Modifications: 	
!
! Comment:		
!----------------------------------------------------------------------
          
          SUBROUTINE h5fget_obj_count_f(file_id, obj_type, obj_count, hdferr)
!
!This definition is needed for Windows DLLs
!DEC$if defined(BUILD_HDF5_DLL)
!DEC$attributes dllexport :: h5fget_obj_count_f
!DEC$endif
!

            IMPLICIT NONE
            INTEGER(HID_T), INTENT(IN) :: file_id ! File identifier
            INTEGER, INTENT(IN)  :: obj_type      ! Object type
            INTEGER, INTENT(OUT) :: obj_count     ! Number of open objects
            INTEGER, INTENT(OUT) :: hdferr        ! Error code

            INTERFACE
              INTEGER FUNCTION h5fget_obj_count_c(file_id, obj_type, obj_count)
              USE H5GLOBAL
              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
       !MS$ATTRIBUTES C,reference,alias:'_H5FGET_OBJ_COUNT_C':: h5fget_obj_count_c
              !DEC$ ENDIF
              INTEGER(HID_T), INTENT(IN) :: file_id
              INTEGER, INTENT(IN)  :: obj_type      ! Object type
              INTEGER, INTENT(OUT) :: obj_count    ! Number of open objects
              END FUNCTION h5fget_obj_count_c
            END INTERFACE

            hdferr = h5fget_obj_count_c(file_id, obj_type, obj_count)

          END SUBROUTINE h5fget_obj_count_f

!----------------------------------------------------------------------
! Name:		h5fget_obj_ids_f
!
! Purpose:	Get list of open objects identifiers within a file
!
! Inputs:  
!		file_id		- file identifier
!               obj_type        - type of the object; possible values are:
!                                 H5F_OBJ_FILE_F 
!                                 H5F_OBJ_DATASET_F 
!                                 H5F_OBJ_GROUP_F 
!                                 H5F_OBJ_DATATYPE_F 
!                                 H5F_OBJ_ALL_F 
! Outputs:  
!               obj_ids         - array of open object identifiers
!		hdferr:		- error code		
!				 	Success:  0
!				 	Failure: -1   
! Optional parameters:
!				NONE
!
! Programmer:	Elena Pourmal
!		September 30, 2002
!
! Modifications: 	
!
! Comment:		
!----------------------------------------------------------------------
          
          SUBROUTINE h5fget_obj_ids_f(file_id, obj_type, max_objs, obj_ids, hdferr)
!
!This definition is needed for Windows DLLs
!DEC$if defined(BUILD_HDF5_DLL)
!DEC$attributes dllexport :: h5fget_obj_ids_f
!DEC$endif
!

            IMPLICIT NONE
            INTEGER(HID_T), INTENT(IN) :: file_id ! File identifier
            INTEGER, INTENT(IN)  :: obj_type   ! Object type
            INTEGER, INTENT(IN)  :: max_objs   ! Maximum # of objects to retrieve
            INTEGER(HID_T), DIMENSION(*), INTENT(INOUT) :: obj_ids
                                               ! Array of open objects iidentifiers
            INTEGER, INTENT(OUT) :: hdferr        ! Error code

            INTERFACE
              INTEGER FUNCTION h5fget_obj_ids_c(file_id, obj_type, max_objs, obj_ids)
              USE H5GLOBAL
              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
       !MS$ATTRIBUTES C,reference,alias:'_H5FGET_OBJ_IDS_C':: h5fget_obj_ids_c
              !DEC$ ENDIF
              INTEGER(HID_T), INTENT(IN) :: file_id
              INTEGER, INTENT(IN)  :: obj_type      
              INTEGER, INTENT(IN)  :: max_objs
              INTEGER(HID_T), DIMENSION(*), INTENT(INOUT) :: obj_ids  
              END FUNCTION h5fget_obj_ids_c
            END INTERFACE

            hdferr = h5fget_obj_ids_c(file_id, obj_type, max_objs, obj_ids)

          END SUBROUTINE h5fget_obj_ids_f

!----------------------------------------------------------------------
! Name:		h5fget_freespace_f
!
! Purpose:	Get amount of free space within a file
!
! Inputs:  
!		file_id		- file identifier
! Outputs:  
!               free_space      - amount of free space in file
!		hdferr:		- error code		
!				 	Success:  0
!				 	Failure: -1   
! Optional parameters:
!				NONE
!
! Programmer:	Quincey Koziol
!		October 7, 2003
!
! Modifications: 	
!
! Comment:		
!----------------------------------------------------------------------
          
          SUBROUTINE h5fget_freespace_f(file_id, free_space, hdferr)
!
!This definition is needed for Windows DLLs
!DEC$if defined(BUILD_HDF5_DLL)
!DEC$attributes dllexport :: h5fget_freespace_f
!DEC$endif
!

            IMPLICIT NONE
            INTEGER(HID_T), INTENT(IN) :: file_id ! File identifier
            INTEGER(HSSIZE_T), INTENT(OUT) :: free_space 
                                             !amount of free space in file
            INTEGER, INTENT(OUT) :: hdferr        ! Error code

            INTERFACE
              INTEGER FUNCTION h5fget_freespace_c(file_id, free_space)
              USE H5GLOBAL
              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
       !MS$ATTRIBUTES C,reference,alias:'_H5FGET_FREESPACE_C':: h5fget_freespace_c
              !DEC$ ENDIF
              INTEGER(HID_T), INTENT(IN) :: file_id
              INTEGER(HSSIZE_T), INTENT(OUT) :: free_space 
              END FUNCTION h5fget_freespace_c
            END INTERFACE

            hdferr = h5fget_freespace_c(file_id, free_space)

          END SUBROUTINE h5fget_freespace_f

!----------------------------------------------------------------------
! Name:		h5fget_name_f 
!
! Purpose: 	Gets the name of the file from the object identifier
!
! Inputs:  
!		obj_id		- object identifier
! Inputs/Outputs:
!		buf		- buffer to read name in
! Outputs:  
!		size		- actual size of the name
!		hdferr:		- error code		
!				 	Success:  0
!				 	Failure: -1   
! Optional parameters:
!
! Programmer:	Elena Pourmal
!		July 6, 2004
!
!----------------------------------------------------------------------


          SUBROUTINE h5fget_name_f(obj_id, buf, size, hdferr) 
!This definition is needed for Windows DLLs
!DEC$if defined(BUILD_HDF5_DLL)
!DEC$attributes dllexport :: h5fget_name_f
!DEC$endif
            IMPLICIT NONE
            INTEGER(HID_T), INTENT(IN) :: obj_id   ! Object identifier 
            CHARACTER(LEN=*), INTENT(INOUT) :: buf   
                                                   ! Buffer to hold file name
            INTEGER(SIZE_T), INTENT(OUT) :: size   ! Size of the file name
            INTEGER, INTENT(OUT) :: hdferr         ! Error code: 0 on success,
                                                   ! -1 if fail
            INTEGER(SIZE_T) :: buflen
!            INTEGER, EXTERNAL :: h5fget_name_c
!  MS FORTRAN needs explicit interface for C functions called here.
!
            INTERFACE
              INTEGER FUNCTION h5fget_name_c(obj_id, size, buf, buflen)
              USE H5GLOBAL
              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
              !MS$ATTRIBUTES C,reference,alias:'_H5FGET_NAME_C'::h5fget_name_c
              !DEC$ ENDIF
              !DEC$ATTRIBUTES reference :: buf
              INTEGER(HID_T), INTENT(IN) :: obj_id
              INTEGER(SIZE_T), INTENT(OUT) :: size
              INTEGER(SIZE_T) :: buflen
              CHARACTER(LEN=*), INTENT(OUT) :: buf
              END FUNCTION h5fget_name_c
            END INTERFACE
            buflen = LEN(buf)
            hdferr = h5fget_name_c(obj_id, size, buf, buflen)
          END SUBROUTINE h5fget_name_f

!----------------------------------------------------------------------
! Name:		h5fget_filesize_f 
!
! Purpose: 	Retrieves the file size of the HDF5 file.
!
! Inputs:  
!		file_id		- file identifier
! Outputs:  
!		size		- file size 
!		hdferr:		- error code		
!				 	Success:  0
!				 	Failure: -1   
! Optional parameters:
!
! Programmer:	Elena Pourmal
!		July 7, 2004
!
!----------------------------------------------------------------------


          SUBROUTINE h5fget_filesize_f(file_id, size, hdferr) 
!This definition is needed for Windows DLLs
!DEC$if defined(BUILD_HDF5_DLL)
!DEC$attributes dllexport :: h5fget_filesize_f
!DEC$endif
            IMPLICIT NONE
            INTEGER(HID_T), INTENT(IN) :: file_id  ! file identifier
            INTEGER(HSIZE_T), INTENT(OUT) :: size  ! Size of the file 
            INTEGER, INTENT(OUT) :: hdferr         ! Error code: 0 on success,
                                                   ! -1 if fail
!            INTEGER, EXTERNAL :: h5fget_filesize_c
!  MS FORTRAN needs explicit interface for C functions called here.
!
            INTERFACE
              INTEGER FUNCTION h5fget_filesize_c(file_id, size)
              USE H5GLOBAL
              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
              !MS$ATTRIBUTES C,reference,alias:'_H5FGET_FILESIZE_C'::h5fget_filesize_c
              !DEC$ ENDIF
              INTEGER(HID_T), INTENT(IN) :: file_id
              INTEGER(HSIZE_T), INTENT(OUT) :: size
              END FUNCTION h5fget_filesize_c
            END INTERFACE
            hdferr = h5fget_filesize_c(file_id, size)
          END SUBROUTINE h5fget_filesize_f


      END MODULE H5F
