[SCM] hdf5 branch, master, updated. upstream/1.8.8-41-ga81877f

Francesco Paolo Lovergine frankie at debian.org
Mon Feb 13 13:46:36 UTC 2012


The following commit has been merged in the master branch:
commit 4b2a5e7685af9b78dd0288b5fce61a9ce1d8635b
Author: Francesco Paolo Lovergine <frankie at debian.org>
Date:   Mon Feb 13 12:47:49 2012 +0100

    Syncing against 1.8.8 upstream version.

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8798106..cb4450e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -165,6 +165,18 @@ STRING (REGEX REPLACE ".*#define[ \t]+H5_VERS_SUBRELEASE[ \t]+\"([0-9A-Za-z.]*)\
 #MESSAGE (STATUS "VERSION: ${H5_VERS_MAJOR}.${H5_VERS_MINOR}.${H5_VERS_RELEASE}-${H5_VERS_SUBRELEASE}")
 
 #-----------------------------------------------------------------------------
+# parse the full soversion number from config/lt_vers.am and include in H5_SOVERS_INFO
+#-----------------------------------------------------------------------------
+FILE (READ ${HDF5_SOURCE_DIR}/config/lt_vers.am _lt_vers_am_contents)
+STRING (REGEX REPLACE ".*LT_VERS_INTERFACE[ \t]+=[ \t]+([0-9]*).*$"
+    "\\1" H5_SOVERS_MAJOR ${_lt_vers_am_contents})
+STRING (REGEX REPLACE ".*LT_VERS_REVISION[ \t]+=[ \t]+([0-9]*).*$"
+    "\\1" H5_SOVERS_MINOR ${_lt_vers_am_contents})
+STRING (REGEX REPLACE ".*LT_VERS_AGE[ \t]+=[ \t]+([0-9]*).*$"
+    "\\1" H5_SOVERS_RELEASE ${_lt_vers_am_contents})
+MESSAGE (STATUS "SOVERSION: ${H5_SOVERS_MAJOR}.${H5_SOVERS_MINOR}.${H5_SOVERS_RELEASE}")
+
+#-----------------------------------------------------------------------------
 # Basic HDF5 stuff here
 #-----------------------------------------------------------------------------
 SET (HDF5_PACKAGE "hdf5")
@@ -172,7 +184,12 @@ SET (HDF5_PACKAGE_NAME "HDF5")
 SET (HDF5_PACKAGE_VERSION "${H5_VERS_MAJOR}.${H5_VERS_MINOR}.${H5_VERS_RELEASE}")
 SET (HDF5_PACKAGE_VERSION_MAJOR "${H5_VERS_MAJOR}.${H5_VERS_MINOR}")
 SET (HDF5_PACKAGE_VERSION_MINOR "${H5_VERS_RELEASE}")
-SET (HDF5_PACKAGE_VERSION_STRING "${HDF5_PACKAGE_VERSION}-${H5_VERS_SUBRELEASE}")
+IF (NOT "${H5_VERS_SUBRELEASE}" STREQUAL "")
+  SET (HDF5_PACKAGE_VERSION_STRING "${HDF5_PACKAGE_VERSION}-${H5_VERS_SUBRELEASE}")
+ELSE (NOT "${H5_VERS_SUBRELEASE}" STREQUAL "")
+  SET (HDF5_PACKAGE_VERSION_STRING "${HDF5_PACKAGE_VERSION}")
+ENDIF (NOT "${H5_VERS_SUBRELEASE}" STREQUAL "")
+SET (HDF5_PACKAGE_SOVERSION "${H5_SOVERS_MAJOR}.${H5_SOVERS_MINOR}.${H5_SOVERS_RELEASE}")
 SET (HDF5_PACKAGE_STRING "${HDF5_PACKAGE_NAME} ${HDF5_PACKAGE_VERSION_STRING}")
 SET (HDF5_PACKAGE_TARNAME "hdf5")
 SET (HDF5_PACKAGE_URL "http://www.hdfgroup.org")
@@ -243,11 +260,15 @@ ENDIF (WIN32 AND NOT CYGWIN)
 #-----------------------------------------------------------------------------
 OPTION (BUILD_SHARED_LIBS "Build Shared Libraries" OFF)
 SET (LIB_TYPE STATIC)
+SET (H5_ENABLE_SHARED_LIB NO)
+SET (H5_ENABLE_STATIC_LIB NO)
 IF (BUILD_SHARED_LIBS)
   SET (LIB_TYPE SHARED)
   SET (H5_BUILT_AS_DYNAMIC_LIB 1)
+  SET (H5_ENABLE_SHARED_LIB YES)
 ELSE (BUILD_SHARED_LIBS)
   SET (H5_BUILT_AS_STATIC_LIB 1)
+  SET (H5_ENABLE_STATIC_LIB YES)
   IF (NOT WIN32)
     # should this be a user setting : Everyone uses it anyway ?
     ADD_DEFINITIONS (-DPIC)
@@ -266,6 +287,17 @@ IF (BUILD_STATIC_EXECS)
 ENDIF (BUILD_STATIC_EXECS)
 
 #-----------------------------------------------------------------------------
+# Option to Build Static PIC
+#-----------------------------------------------------------------------------
+OPTION (BUILD_STATIC_PIC "Build Static PIC" OFF)
+IF (BUILD_STATIC_PIC)
+  IF (NOT WIN32)
+    SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
+    SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
+  ENDIF (NOT WIN32)
+ENDIF (BUILD_STATIC_PIC)
+
+#-----------------------------------------------------------------------------
 # Option to use code coverage
 #-----------------------------------------------------------------------------
 OPTION (HDF5_ENABLE_COVERAGE "Enable code coverage for Libraries and Programs" OFF)
@@ -354,10 +386,22 @@ ENDIF (CMAKE_BUILD_TYPE MATCHES Debug)
 # Compiler specific flags : Shouldn't there be compiler tests for these
 #-----------------------------------------------------------------------------
 IF (CMAKE_COMPILER_IS_GNUCC)
+  IF (CMAKE_BUILD_TYPE MATCHES Debug)
+    SET (CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS} -std=c99 -finline-functions -fno-common")
+  ELSE (CMAKE_BUILD_TYPE MATCHES Debug)
   SET (CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS} -std=c99 -fomit-frame-pointer -finline-functions -fno-common")
+  ENDIF (CMAKE_BUILD_TYPE MATCHES Debug)
 ENDIF (CMAKE_COMPILER_IS_GNUCC)
 
 #-----------------------------------------------------------------------------
+# Option to embed library info into executables
+#-----------------------------------------------------------------------------
+OPTION (HDF5_ENABLE_EMBEDDED_LIBINFO "embed library info into executables" ON)
+IF (HDF5_ENABLE_EMBEDDED_LIBINFO)
+  SET (H5_HAVE_EMBEDDED_LIBINFO 1)
+ENDIF (HDF5_ENABLE_EMBEDDED_LIBINFO)
+
+#-----------------------------------------------------------------------------
 # Option to allow the user to disable compiler warnings
 #-----------------------------------------------------------------------------
 OPTION (HDF5_DISABLE_COMPILER_WARNINGS "Disable compiler warnings" OFF)
@@ -448,6 +492,7 @@ MACRO (HDF5_SETUP_FILTERS FILTER)
   OPTION (HDF5_USE_FILTER_${FILTER} "Use the ${FILTER} Filter" ON)
   IF (HDF5_USE_FILTER_${FILTER})
     SET (H5_HAVE_FILTER_${FILTER} 1)
+    SET (FILTERS "${FILTERS} ${FILTER}")
   ENDIF (HDF5_USE_FILTER_${FILTER})
   # MESSAGE (STATUS "Filter ${FILTER} is ${HDF5_USE_FILTER_${FILTER}}")
 ENDMACRO (HDF5_SETUP_FILTERS)
@@ -508,6 +553,9 @@ IF (HDF5_ENABLE_Z_LIB_SUPPORT)
     SET (H5_HAVE_ZLIB_H 1)
     SET (H5_HAVE_LIBZ 1)
   ENDIF (NOT H5_ZLIB_HEADER)
+  IF (H5_HAVE_FILTER_DEFLATE)
+    SET (EXTERNAL_FILTERS "${EXTERNAL_FILTERS} DEFLATE")
+  ENDIF (H5_HAVE_FILTER_DEFLATE)
   SET (LINK_LIBS ${LINK_LIBS} ${ZLIB_LIBRARIES})
   INCLUDE_DIRECTORIES (${ZLIB_INCLUDE_DIRS})
   MESSAGE (STATUS "Filter ZLIB is ON")
@@ -516,7 +564,6 @@ ENDIF (HDF5_ENABLE_Z_LIB_SUPPORT)
 #-----------------------------------------------------------------------------
 # Option for SzLib support
 #-----------------------------------------------------------------------------
-SET (CMAKE_MODULE_PATH ${HDF5_RESOURCES_DIR} ${CMAKE_MODULE_PATH})
 OPTION (HDF5_ENABLE_SZIP_SUPPORT "Use SZip Filter" OFF)
 IF (HDF5_ENABLE_SZIP_SUPPORT)
   OPTION (HDF5_ENABLE_SZIP_ENCODING "Use SZip Encoding" OFF)
@@ -542,8 +589,12 @@ IF (HDF5_ENABLE_SZIP_SUPPORT)
   SET (LINK_LIBS ${LINK_LIBS} ${SZIP_LIBRARIES})
   INCLUDE_DIRECTORIES (${SZIP_INCLUDE_DIRS})
   MESSAGE (STATUS "Filter SZIP is ON")
+  IF (H5_HAVE_FILTER_SZIP)
+    SET (EXTERNAL_FILTERS "${EXTERNAL_FILTERS} DECODE")
+  ENDIF (H5_HAVE_FILTER_SZIP)
   IF (HDF5_ENABLE_SZIP_ENCODING)
     SET (H5_HAVE_SZIP_ENCODER 1)
+    SET (EXTERNAL_FILTERS "${EXTERNAL_FILTERS} ENCODE")
   ENDIF (HDF5_ENABLE_SZIP_ENCODING)
 ENDIF (HDF5_ENABLE_SZIP_SUPPORT)
 
@@ -553,6 +604,7 @@ ENDIF (HDF5_ENABLE_SZIP_SUPPORT)
 OPTION (HDF5_PACKAGE_EXTLIBS "CPACK - include external libraries" OFF)
 IF (NOT HDF5_EXTERNALLY_CONFIGURED)
   IF (HDF5_PACKAGE_EXTLIBS)
+    SET (HDF5_NO_PACKAGES OFF CACHE BOOL "CPACK - Disable packaging" FORCE)
     IF (HDF5_ENABLE_Z_LIB_SUPPORT AND ZLIB_FOUND)
       PACKAGE_ZLIB_LIBRARY (${HDF5_ALLOW_EXTERNAL_SUPPORT} ${LIB_TYPE})
     ENDIF (HDF5_ENABLE_Z_LIB_SUPPORT AND ZLIB_FOUND)
@@ -575,22 +627,18 @@ IF (WIN32 AND NOT CYGWIN)
     ENDIF (HDF5_ENABLE_PARALLEL)
     SET (H5_HAVE_THREADSAFE 1)
     IF (H5_HAVE_IOEO)
-    MESSAGE (STATUS " **** Windows Threads only available in WINVER>=0x600 (Vista or Windows 7)**** ")
+      MESSAGE (STATUS " **** Windows Threads only available in WINVER>=0x600 (Vista or Windows 7)**** ")
       SET (H5_HAVE_WIN_THREADS 1)
+    ELSE (H5_HAVE_IOEO)
+      IF (NOT H5_HAVE_PTHREAD_H)
+        SET (H5_HAVE_THREADSAFE 0)
+        MESSAGE (FATAL " **** Threadsafe option requires thread library **** ")
+      ENDIF (NOT H5_HAVE_PTHREAD_H)
     ENDIF (H5_HAVE_IOEO)
   ENDIF (HDF5_ENABLE_THREADSAFE)
 ENDIF (WIN32 AND NOT CYGWIN)
 
 #-----------------------------------------------------------------------------
-# Option to use PACKED BITS SUPPORT
-#-----------------------------------------------------------------------------
-OPTION (HDF5_USE_H5DUMP_PACKED_BITS "Use the PACKED BITS feature in h5dump" OFF)
-SET (H5_HAVE_H5DUMP_PACKED_BITS 0)
-IF (HDF5_USE_H5DUMP_PACKED_BITS)
-  SET (H5_HAVE_H5DUMP_PACKED_BITS 1)
-ENDIF (HDF5_USE_H5DUMP_PACKED_BITS)
-
-#-----------------------------------------------------------------------------
 # Add the HDF5 Library Target to the build
 #-----------------------------------------------------------------------------
 ADD_SUBDIRECTORY (${HDF5_SOURCE_DIR}/src ${PROJECT_BINARY_DIR}/src)
@@ -660,6 +708,7 @@ SET (H5_FC_FUNC_ "H5_FC_FUNC_(name,NAME) name ## _")
 IF (EXISTS "${HDF5_SOURCE_DIR}/fortran" AND IS_DIRECTORY "${HDF5_SOURCE_DIR}/fortran")
   OPTION (HDF5_BUILD_FORTRAN "Build FORTRAN support" OFF)
   IF (HDF5_BUILD_FORTRAN)
+    OPTION (HDF5_ENABLE_F2003 "Enable FORTRAN 2003 Standard" OFF)
     INCLUDE (${HDF5_RESOURCES_DIR}/HDF5UseFortran.cmake)
     ADD_SUBDIRECTORY (${HDF5_SOURCE_DIR}/fortran ${PROJECT_BINARY_DIR}/fortran)
     IF (HDF5_BUILD_HL_LIB)
@@ -733,52 +782,14 @@ IF (NOT HDF5_INSTALL_NO_DEVELOPMENT)
 ENDIF (NOT HDF5_INSTALL_NO_DEVELOPMENT)
 
 #-----------------------------------------------------------------------------
-# Option for external libraries
-#-----------------------------------------------------------------------------
-IF (NOT HDF5_EXTERNALLY_CONFIGURED)
-  IF (HDF5_PACKAGE_EXTLIBS)
-    IF (HDF5_ENABLE_Z_LIB_SUPPORT AND ZLIB_FOUND)
-      INSTALL (
-          FILES ${ZLIB_INCLUDE_DIR}/zlib.h
-          DESTINATION ${HDF5_INSTALL_INCLUDE_DIR}
-          COMPONENT headers
-      )
-    ENDIF (HDF5_ENABLE_Z_LIB_SUPPORT AND ZLIB_FOUND)
-    IF (HDF5_ENABLE_SZIP_SUPPORT AND SZIP_FOUND)
-      INSTALL (
-          FILES ${SZIP_INCLUDE_DIR}/szlib.h ${SZIP_INCLUDE_DIR}/szip_adpt.h ${SZIP_INCLUDE_DIR}/ricehdf.h
-          DESTINATION ${HDF5_INSTALL_INCLUDE_DIR}
-          COMPONENT headers
-      )
-    ENDIF (HDF5_ENABLE_SZIP_SUPPORT AND SZIP_FOUND)
-    INSTALL (
-        FILES ${EXTERNAL_HEADER_LIST}
-        DESTINATION ${HDF5_INSTALL_INCLUDE_DIR}
-        COMPONENT headers
-    )
-    INSTALL(
-        FILES ${EXTERNAL_LIBRARY_LIST}
-        DESTINATION ${HDF5_INSTALL_LIB_DIR}
-        COMPONENT libraries
-    )
-    IF (WIN32 AND BUILD_SHARED_LIBS)
-      INSTALL(
-          FILES ${EXTERNAL_LIBRARYDLL_LIST}
-          DESTINATION ${HDF5_INSTALL_BIN_DIR}
-          COMPONENT libraries
-      )
-    ENDIF (WIN32 AND BUILD_SHARED_LIBS)
-  ENDIF (HDF5_PACKAGE_EXTLIBS)
-ENDIF (NOT HDF5_EXTERNALLY_CONFIGURED)
-
-#-----------------------------------------------------------------------------
 # Add Target(s) to CMake Install for import into other projects
 #-----------------------------------------------------------------------------
 IF (NOT HDF5_EXTERNALLY_CONFIGURED)
   INSTALL (
       EXPORT ${HDF5_EXPORTED_TARGETS}
-      DESTINATION ${HDF5_INSTALL_DATA_DIR}/cmake/hdf5-${HDF5_PACKAGE_VERSION}
+      DESTINATION ${HDF5_INSTALL_DATA_DIR}/cmake/hdf5
       FILE hdf5-targets.cmake
+      COMPONENT configinstall
   )
 ENDIF (NOT HDF5_EXTERNALLY_CONFIGURED)
 
@@ -818,7 +829,8 @@ IF (NOT HDF5_EXTERNALLY_CONFIGURED)
   )
   INSTALL (
       FILES ${HDF5_BINARY_DIR}/CMakeFiles/hdf5-config.cmake
-      DESTINATION ${HDF5_INSTALL_DATA_DIR}/cmake/hdf5-${HDF5_PACKAGE_VERSION}
+      DESTINATION ${HDF5_INSTALL_DATA_DIR}/cmake/hdf5
+      COMPONENT configinstall
   )
 ENDIF (NOT HDF5_EXTERNALLY_CONFIGURED)
 
@@ -832,11 +844,25 @@ IF (NOT HDF5_EXTERNALLY_CONFIGURED)
   )
   INSTALL (
       FILES ${HDF5_BINARY_DIR}/CMakeFiles/hdf5-config-version.cmake
-      DESTINATION ${HDF5_INSTALL_DATA_DIR}/cmake/hdf5-${HDF5_PACKAGE_VERSION}
+      DESTINATION ${HDF5_INSTALL_DATA_DIR}/cmake/hdf5
+      COMPONENT configinstall
   )
 ENDIF (NOT HDF5_EXTERNALLY_CONFIGURED)
 
 #-----------------------------------------------------------------------------
+# Configure the libhdf5.settings file for the lib info
+#-----------------------------------------------------------------------------
+IF (H5_WORDS_BIGENDIAN)
+  SET (BYTESEX big-endian)
+ELSE (H5_WORDS_BIGENDIAN)
+  SET (BYTESEX little-endian)
+ENDIF (H5_WORDS_BIGENDIAN)
+CONFIGURE_FILE (
+    ${HDF5_RESOURCES_DIR}/libhdf5.settings.cmake.in 
+    ${HDF5_BINARY_DIR}/libhdf5.settings @ONLY
+)
+
+#-----------------------------------------------------------------------------
 # Add Document File(s) to CMake Install
 #-----------------------------------------------------------------------------
 IF (NOT HDF5_EXTERNALLY_CONFIGURED)
@@ -851,6 +877,7 @@ IF (NOT HDF5_EXTERNALLY_CONFIGURED)
   IF (EXISTS "${HDF5_SOURCE_DIR}/release_docs" AND IS_DIRECTORY "${HDF5_SOURCE_DIR}/release_docs")
     SET (release_files
         ${HDF5_SOURCE_DIR}/release_docs/CMake.txt
+        ${HDF5_SOURCE_DIR}/release_docs/Using_CMake.txt
         ${HDF5_SOURCE_DIR}/release_docs/COPYING
         ${HDF5_SOURCE_DIR}/release_docs/HISTORY-1_8.txt
         ${HDF5_SOURCE_DIR}/release_docs/INSTALL
@@ -872,7 +899,7 @@ IF (NOT HDF5_EXTERNALLY_CONFIGURED)
     IF (HDF5_ENABLE_PARALLEL)
       SET (release_files
           ${release_files}
-          ${HDF5_SOURCE_DIR}/release_docs/INSTALL_parallel.txt
+          ${HDF5_SOURCE_DIR}/release_docs/INSTALL_parallel
       )
     ENDIF (HDF5_ENABLE_PARALLEL)
     INSTALL (
@@ -886,7 +913,7 @@ ENDIF (NOT HDF5_EXTERNALLY_CONFIGURED)
 #-----------------------------------------------------------------------------
 # Set the cpack variables
 #-----------------------------------------------------------------------------
-IF (NOT HDF5_EXTERNALLY_CONFIGURED)
+IF (NOT HDF5_EXTERNALLY_CONFIGURED AND NOT HDF5_NO_PACKAGES)
   SET (CPACK_PACKAGE_VENDOR "HDF Group")
   SET (CPACK_PACKAGE_NAME "${HDF5_PACKAGE_NAME}")
   SET (CPACK_PACKAGE_INSTALL_DIRECTORY "${HDF5_PACKAGE_NAME}")
@@ -900,8 +927,6 @@ IF (NOT HDF5_EXTERNALLY_CONFIGURED)
     SET (CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/release_docs/RELEASE.txt")
   ENDIF (EXISTS "${HDF5_SOURCE_DIR}/release_docs")
   SET (CPACK_PACKAGE_RELOCATABLE TRUE)
-  #only needed for cmake 2.8.3
-  SET (CPACK_MONOLITHIC_INSTALL 1)  
   IF (WIN32)
     SET (CPACK_NSIS_CONTACT "help at hdfgroup.org")
     SET (CPACK_NSIS_MODIFY_PATH ON)
@@ -909,10 +934,29 @@ IF (NOT HDF5_EXTERNALLY_CONFIGURED)
   ELSE (WIN32)
     SET (CPACK_RPM_COMPONENT_INSTALL ON)
   ENDIF (WIN32)
+  SET (CPACK_MONOLITHIC_INSTALL ON)
   
-  INCLUDE (CPack)
   INCLUDE(InstallRequiredSystemLibraries)
 
+  SET (CPACK_INSTALL_CMAKE_PROJECTS "${HDF5_BINARY_DIR};HDF5;ALL;/")
+  
+  IF (HDF5_PACKAGE_EXTLIBS)
+    IF (HDF5_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF5_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")
+      IF (ZLIB_FOUND AND ZLIB_USE_EXTERNAL)
+        SET (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${ZLIB_INCLUDE_DIR_GEN};ZLIB;libraries;/")
+        SET (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${ZLIB_INCLUDE_DIR_GEN};ZLIB;headers;/")
+        SET (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${ZLIB_INCLUDE_DIR_GEN};ZLIB;configinstall;/")
+      ENDIF (ZLIB_FOUND AND ZLIB_USE_EXTERNAL)
+      IF (SZIP_FOUND AND SZIP_USE_EXTERNAL)
+        SET (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${SZIP_INCLUDE_DIR_GEN};SZIP;libraries;/")
+        SET (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${SZIP_INCLUDE_DIR_GEN};SZIP;headers;/")
+        SET (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${SZIP_INCLUDE_DIR_GEN};SZIP;configinstall;/")
+      ENDIF (SZIP_FOUND AND SZIP_USE_EXTERNAL)
+    ENDIF (HDF5_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF5_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")
+  ENDIF (HDF5_PACKAGE_EXTLIBS)
+  
+  INCLUDE (CPack)
+
   #---------------------------------------------------------------------------
   # Now list the cpack commands
   #---------------------------------------------------------------------------
@@ -934,6 +978,11 @@ IF (NOT HDF5_EXTERNALLY_CONFIGURED)
       DISPLAY_NAME "HDF5 Documents"
       GROUP Documents
   )
+  CPACK_ADD_COMPONENT (configinstall 
+      DISPLAY_NAME "HDF5 CMake files" 
+      DEPENDS libraries
+      GROUP Development
+  )
   
   IF (HDF5_BUILD_FORTRAN)
     CPACK_ADD_COMPONENT (fortlibraries 
@@ -1012,4 +1061,4 @@ IF (NOT HDF5_EXTERNALLY_CONFIGURED)
     )
   ENDIF (HDF5_BUILD_HL_LIB)
   
-ENDIF (NOT HDF5_EXTERNALLY_CONFIGURED)
+ENDIF (NOT HDF5_EXTERNALLY_CONFIGURED AND NOT HDF5_NO_PACKAGES)
diff --git a/CTestConfig.cmake b/CTestConfig.cmake
index d3ea7a3..655f76d 100644
--- a/CTestConfig.cmake
+++ b/CTestConfig.cmake
@@ -4,15 +4,14 @@
 ## # The following are required to uses Dart and the Cdash dashboard
 ##   ENABLE_TESTING()
 ##   INCLUDE(CTest)
+SET (CTEST_PROJECT_NAME "HDF5")
 
 SET (CTEST_DROP_METHOD "http")
 IF (CDASH_LOCAL)
-  SET (CTEST_PROJECT_NAME "HDF5.1.8")
   SET (CTEST_NIGHTLY_START_TIME "20:00:00 CST")
   SET (CTEST_DROP_SITE "nei.hdfgroup.uiuc.edu")
   SET (CTEST_DROP_LOCATION "/cdash/submit.php?project=HDF5.1.8")
 ELSE (CDASH_LOCAL)
-  SET (CTEST_PROJECT_NAME "HDF518")
   SET (CTEST_NIGHTLY_START_TIME "00:00:00 EST")
   SET (CTEST_DROP_SITE "cdash.hdfgroup.uiuc.edu")
   SET (CTEST_DROP_LOCATION "/submit.php?project=HDF518")
@@ -22,10 +21,6 @@ SET (CTEST_DROP_SITE_CDASH TRUE)
 SET (UPDATE_TYPE svn)
 SET (VALGRIND_COMMAND "/usr/bin/valgrind")
 SET (VALGRIND_COMMAND_OPTIONS "-v --tool=memcheck --leak-check=full --track-fds=yes --num-callers=50 --show-reachable=yes --track-origins=yes --malloc-fill=0xff --free-fill=0xfe")
-SET (MEMORYCHECK_COMMAND "/usr/bin/valgrind")
-SET (MEMORYCHECKCOMMAND "/usr/bin/valgrind")
-SET (CTEST_MEMORYCHECK_COMMAND_OPTIONS "-v --tool=memcheck --leak-check=full --track-fds=yes --num-callers=50 --show-reachable=yes --track-origins=yes --malloc-fill=0xff --free-fill=0xfe")
-SET (CTEST_MEMORYCHECKCOMMAND_OPTIONS "-v --tool=memcheck --leak-check=full --track-fds=yes --num-callers=50 --show-reachable=yes --track-origins=yes --malloc-fill=0xff --free-fill=0xfe")
 
 SET (CTEST_TESTING_TIMEOUT 3600) 
 SET (DART_TESTING_TIMEOUT 3600) 
diff --git a/MANIFEST b/MANIFEST
index 5212b9a..d82c0eb 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -64,6 +64,7 @@
 ./bin/mkdirs
 ./bin/mkinstalldirs
 ./bin/newer
+./bin/output_filter.sh
 ./bin/reconfigure      _DO_NOT_DISTRIBUTE_
 ./bin/release
 ./bin/runtest        _DO_NOT_DISTRIBUTE_
@@ -98,7 +99,6 @@
 ./config/linux-gnulibc1
 ./config/linux-gnulibc2
 ./config/lt_vers.am
-./config/mpich
 ./config/nec-superux14.1
 ./config/Makefile.am.blank
 ./config/pgi-fflags
@@ -145,10 +145,14 @@
 ./fortran/Makefile.am
 ./fortran/Makefile.in
 
+./fortran/robodoc.rc
+
 ./fortran/examples/Makefile.am
 ./fortran/examples/Makefile.in
 ./fortran/examples/attrexample.f90
 ./fortran/examples/compound.f90
+./fortran/examples/compound_fortran2003.f90
+./fortran/examples/compound_complex_fortran2003.f90
 ./fortran/examples/dsetexample.f90
 ./fortran/examples/fileexample.f90
 ./fortran/examples/groupexample.f90
@@ -164,17 +168,28 @@
 ./fortran/examples/rwdsetexample.f90
 ./fortran/examples/selectele.f90
 ./fortran/examples/testh5fc.sh.in
+./fortran/examples/nested_derived_type.f90
+./fortran/examples/rwdset_fortran2003.f90
+
 
 ./fortran/src/H5_f.c
 ./fortran/src/H5_ff.f90
+./fortran/src/H5_ff_F90.f90
+./fortran/src/H5_ff_F03.f90
 ./fortran/src/H5_DBLE_InterfaceInclude.f90
 ./fortran/src/H5_DBLE_InterfaceExclude.f90
 ./fortran/src/H5Af.c
 ./fortran/src/H5Aff.f90
+./fortran/src/H5Aff_F90.f90
+./fortran/src/H5Aff_F03.f90
 ./fortran/src/H5Df.c
 ./fortran/src/H5Dff.f90
+./fortran/src/H5Dff_F90.f90
+./fortran/src/H5Dff_F03.f90
 ./fortran/src/H5Ef.c
 ./fortran/src/H5Eff.f90
+./fortran/src/H5Eff_F90.f90
+./fortran/src/H5Eff_F03.f90
 ./fortran/src/H5FDmpiof.c
 ./fortran/src/H5FDmpioff.f90
 ./fortran/src/H5Ff.c
@@ -185,16 +200,26 @@
 ./fortran/src/H5Iff.f90
 ./fortran/src/H5Lf.c
 ./fortran/src/H5Lff.f90
+./fortran/src/H5Lff_F90.f90
+./fortran/src/H5Lff_F03.f90
 ./fortran/src/H5Of.c
 ./fortran/src/H5Off.f90
+./fortran/src/H5Off_F90.f90
+./fortran/src/H5Off_F03.f90
 ./fortran/src/H5Pf.c
 ./fortran/src/H5Pff.f90
+./fortran/src/H5Pff_F90.f90
+./fortran/src/H5Pff_F03.f90
 ./fortran/src/H5Rf.c
 ./fortran/src/H5Rff.f90
+./fortran/src/H5Rff_F90.f90
+./fortran/src/H5Rff_F03.f90
 ./fortran/src/H5Sf.c
 ./fortran/src/H5Sff.f90
 ./fortran/src/H5Tf.c
 ./fortran/src/H5Tff.f90
+./fortran/src/H5Tff_F90.f90
+./fortran/src/H5Tff_F03.f90
 ./fortran/src/H5Zf.c
 ./fortran/src/H5Zff.f90
 ./fortran/src/H5f90.h
@@ -213,6 +238,7 @@
 ./fortran/src/README_DEVELOPEMENT   _DO_NOT_DISTRIBUTE_
 ./fortran/src/h5fc.in
 ./fortran/src/hdf5_fortrandll.def
+./fortran/src/phdf5_fortrandll.def
 
 ./fortran/test/Makefile.am
 ./fortran/test/Makefile.in
@@ -220,22 +246,27 @@
 ./fortran/test/fflush2.f90
 ./fortran/test/fortranlib_test.f90
 ./fortran/test/fortranlib_test_1_8.f90
+./fortran/test/fortranlib_test_F03.f90
 ./fortran/test/t.c
 ./fortran/test/t.h
 ./fortran/test/tf.f90
 ./fortran/test/tH5A.f90
 ./fortran/test/tH5A_1_8.f90
 ./fortran/test/tH5D.f90
+./fortran/test/tH5E_F03.f90
 ./fortran/test/tH5E.f90
 ./fortran/test/tH5F.f90
 ./fortran/test/tH5G.f90
 ./fortran/test/tH5G_1_8.f90
 ./fortran/test/tH5I.f90
+./fortran/test/tH5L_F03.f90
 ./fortran/test/tH5O.f90
+./fortran/test/tH5P_F03.f90
 ./fortran/test/tH5P.f90
 ./fortran/test/tH5R.f90
 ./fortran/test/tH5S.f90
 ./fortran/test/tH5Sselect.f90
+./fortran/test/tH5T_F03.f90
 ./fortran/test/tH5T.f90
 ./fortran/test/tH5VL.f90
 ./fortran/test/tH5Z.f90
@@ -417,6 +448,7 @@
 ./release_docs/CMake.txt
 ./release_docs/INSTALL_parallel
 ./release_docs/RELEASE.txt
+./release_docs/Using_CMake.txt
 
 ./src/.indent.pro      _DO_NOT_DISTRIBUTE_
 ./src/hdf5.lnt        _DO_NOT_DISTRIBUTE_
@@ -507,6 +539,7 @@
 ./src/H5Eterm.h
 ./src/H5F.c
 ./src/H5Faccum.c
+./src/H5Fcwfs.c
 ./src/H5Fdbg.c
 ./src/H5Fefc.c
 ./src/H5Ffake.c
@@ -608,6 +641,7 @@
 ./src/H5HGpkg.h
 ./src/H5HGprivate.h
 ./src/H5HGpublic.h
+./src/H5HGquery.c
 ./src/H5HL.c
 ./src/H5HLcache.c
 ./src/H5HLdbg.c
@@ -810,6 +844,7 @@
 ./test/external.c
 ./test/error_test.c
 ./test/err_compat.c
+./test/filter_error.h5
 ./test/links_env.c
 ./test/family_v16_00000.h5
 ./test/family_v16_00001.h5
@@ -859,6 +894,8 @@
 ./test/mf.c
 ./test/mount.c
 ./test/mtime.c
+./test/multi_file_v16-r.h5
+./test/multi_file_v16-s.h5
 ./test/noencoder.h5
 ./test/ntypes.c
 ./test/ohdr.c
@@ -918,7 +955,6 @@
 ./test/tvltypes.c
 ./test/unlink.c
 ./test/vfd.c
-./test/vms_data.h5
 ./test/test_filters_le.hdf5
 ./test/test_filters_be.hdf5
 ./test/gen_filters.c
@@ -971,45 +1007,47 @@
 ./tools/h5import/h5import.c
 ./tools/h5import/h5importtest.c
 ./tools/h5import/h5importtestutil.sh
-./tools/h5import/testfiles/binfp32.conf
+
+# testfiles for h5import
+./tools/h5import/testfiles/binin32.h5
+./tools/h5import/testfiles/binin16.h5
+./tools/h5import/testfiles/txtfp32.txt
+./tools/h5import/testfiles/txtstr.conf
+./tools/h5import/testfiles/txtfp32.conf
+./tools/h5import/testfiles/binin8w.conf
+./tools/h5import/testfiles/binin8.h5
+./tools/h5import/testfiles/txtfp64.conf
+./tools/h5import/testfiles/binuin32.conf
+./tools/h5import/testfiles/txtuin32.txt
+./tools/h5import/testfiles/binuin16.conf
+./tools/h5import/testfiles/txtstr.h5
+./tools/h5import/testfiles/txtfp32.h5
+./tools/h5import/testfiles/txtin32.h5
+./tools/h5import/testfiles/txtin16.h5
+./tools/h5import/testfiles/binin8w.h5
+./tools/h5import/testfiles/txtin32.txt
 ./tools/h5import/testfiles/binfp64.conf
-./tools/h5import/testfiles/binin16.conf
-./tools/h5import/testfiles/binin32.conf
 ./tools/h5import/testfiles/binin8.conf
-./tools/h5import/testfiles/binuin16.conf
-./tools/h5import/testfiles/binuin32.conf
-./tools/h5import/testfiles/fp1.txt
-./tools/h5import/testfiles/fp2.txt
-./tools/h5import/testfiles/in1.txt
-./tools/h5import/testfiles/textfp32.conf
-./tools/h5import/testfiles/textfp64.conf
-./tools/h5import/testfiles/textin16.conf
-./tools/h5import/testfiles/textin32.conf
-./tools/h5import/testfiles/textin8.conf
-./tools/h5import/testfiles/textuin16.conf
-./tools/h5import/testfiles/textuin32.conf
-./tools/h5import/testfiles/test1.h5
-./tools/h5import/testfiles/test2.h5
-./tools/h5import/testfiles/test3.h5
-./tools/h5import/testfiles/test4.h5
-./tools/h5import/testfiles/test5.h5
-./tools/h5import/testfiles/test6.h5
-./tools/h5import/testfiles/test7.h5
-./tools/h5import/testfiles/test8.h5
-./tools/h5import/testfiles/test9.h5
-./tools/h5import/testfiles/test10.h5
-./tools/h5import/testfiles/test11.h5
-./tools/h5import/testfiles/test12.h5
-./tools/h5import/testfiles/test13.h5
-./tools/h5import/testfiles/test14.h5
-./tools/h5import/testfiles/test15.h5
-./tools/h5import/testfiles/textstr.conf
-./tools/h5import/testfiles/str.txt
+./tools/h5import/testfiles/txtin8.conf
+./tools/h5import/testfiles/binfp64.h5
+./tools/h5import/testfiles/txtstr.txt
+./tools/h5import/testfiles/txtin32.conf
+./tools/h5import/testfiles/txtin16.conf
+./tools/h5import/testfiles/txtin8.h5
+./tools/h5import/testfiles/txtuin32.conf
+./tools/h5import/testfiles/txtuin16.conf
+./tools/h5import/testfiles/binin32.conf
+./tools/h5import/testfiles/binin16.conf
+./tools/h5import/testfiles/txtfp64.h5
+./tools/h5import/testfiles/txtin16.txt
+./tools/h5import/testfiles/txtfp64.txt
+./tools/h5import/testfiles/binuin32.h5
+./tools/h5import/testfiles/binuin16.h5
+./tools/h5import/testfiles/txtuin32.h5
+./tools/h5import/testfiles/txtuin16.h5
 ./tools/h5import/testfiles/textpfe.conf
-./tools/h5import/testfiles/in64.txt
-./tools/h5import/testfiles/in32.txt
-./tools/h5import/testfiles/in16.txt
-
+./tools/h5import/testfiles/textpfe64.txt
+./tools/h5import/testfiles/textpfe.h5
 
 # h5diff sources
 ./tools/h5diff/Makefile.am
@@ -1134,6 +1172,7 @@
 ./tools/testfiles/filter_fail.h5
 ./tools/testfiles/filter_fail.ddl
 ./tools/testfiles/packedbits.ddl
+./tools/testfiles/h5dump-help.txt
 ./tools/testfiles/tall-1.ddl
 ./tools/testfiles/tall-2.ddl
 ./tools/testfiles/tall-3.ddl
@@ -1325,7 +1364,6 @@
 ./tools/testfiles/tbigdims.h5
 ./tools/testfiles/thyperslab.h5
 # h5dump packed bits validation
-./tools/testfiles/tnofilename-with-packed-bits.ddl
 ./tools/testfiles/tpbitsLengthPositive.ddl
 ./tools/testfiles/tpbitsMaxExceeded.ddl
 ./tools/testfiles/tpbitsSigned.ddl
@@ -1396,7 +1434,8 @@
 ./tools/testfiles/tfpformat.h5
 # h5dump h5repack validation
 ./tools/testfiles/h5repack_filters.h5.ddl
-
+./tools/testfiles/zerodim.ddl
+./tools/testfiles/zerodim.h5
 
 # Expected output from h5ls tests
 ./tools/testfiles/nosuchfile.ls
@@ -1556,6 +1595,7 @@
 ./tools/h5diff/testfiles/h5diff_26.txt
 ./tools/h5diff/testfiles/h5diff_27.txt
 ./tools/h5diff/testfiles/h5diff_28.txt
+./tools/h5diff/testfiles/h5diff_30.txt
 ./tools/h5diff/testfiles/h5diff_50.txt
 ./tools/h5diff/testfiles/h5diff_51.txt
 ./tools/h5diff/testfiles/h5diff_52.txt
@@ -1592,6 +1632,15 @@
 ./tools/h5diff/testfiles/h5diff_627.txt
 ./tools/h5diff/testfiles/h5diff_628.txt
 ./tools/h5diff/testfiles/h5diff_629.txt
+./tools/h5diff/testfiles/h5diff_630.txt
+./tools/h5diff/testfiles/h5diff_631.txt
+./tools/h5diff/testfiles/h5diff_640.txt
+./tools/h5diff/testfiles/h5diff_641.txt
+./tools/h5diff/testfiles/h5diff_642.txt
+./tools/h5diff/testfiles/h5diff_643.txt
+./tools/h5diff/testfiles/h5diff_644.txt
+./tools/h5diff/testfiles/h5diff_645.txt
+./tools/h5diff/testfiles/h5diff_646.txt
 ./tools/h5diff/testfiles/h5diff_70.txt
 ./tools/h5diff/testfiles/h5diff_700.txt
 ./tools/h5diff/testfiles/h5diff_701.txt
@@ -1624,6 +1673,10 @@
 ./tools/h5diff/testfiles/h5diff_205.txt
 ./tools/h5diff/testfiles/h5diff_206.txt
 ./tools/h5diff/testfiles/h5diff_207.txt
+./tools/h5diff/testfiles/h5diff_208.txt
+./tools/h5diff/testfiles/h5diff_220.txt
+./tools/h5diff/testfiles/h5diff_221.txt
+./tools/h5diff/testfiles/h5diff_222.txt
 ./tools/h5diff/testfiles/h5diff_300.txt
 ./tools/h5diff/testfiles/h5diff_400.txt
 ./tools/h5diff/testfiles/h5diff_401.txt
@@ -1686,6 +1739,7 @@
 ./tools/h5diff/testfiles/h5diff_517.txt
 ./tools/h5diff/testfiles/h5diff_518.txt
 ./tools/h5diff/testfiles/h5diff_530.txt
+./tools/h5diff/testfiles/h5diff_540.txt
 
 ./tools/h5diff/testfiles/h5diff_attr1.h5
 ./tools/h5diff/testfiles/h5diff_attr2.h5
@@ -1720,8 +1774,13 @@
 ./tools/h5diff/testfiles/h5diff_exclude2-1.h5
 ./tools/h5diff/testfiles/h5diff_exclude2-2.h5
 ./tools/h5diff/testfiles/h5diff_comp_vl_strs.h5
-
-
+./tools/h5diff/testfiles/h5diff_dset_zero_dim_size1.h5
+./tools/h5diff/testfiles/h5diff_dset_zero_dim_size2.h5
+./tools/h5diff/testfiles/h5diff_enum_invalid_values.h5
+./tools/h5diff/testfiles/compounds_array_vlen1.h5
+./tools/h5diff/testfiles/compounds_array_vlen2.h5
+./tools/h5diff/testfiles/non_comparables1.h5
+./tools/h5diff/testfiles/non_comparables2.h5
 
 
 #test files for h5repack
@@ -1740,6 +1799,7 @@
 ./tools/h5repack/testfiles/h5repack_filters.h5
 ./tools/h5repack/testfiles/h5repack_soffset.h5
 ./tools/h5repack/testfiles/h5repack_attr.h5
+./tools/h5repack/testfiles/h5repack_attr_refs.h5
 ./tools/h5repack/testfiles/h5repack_early.h5
 ./tools/h5repack/testfiles/h5repack_layout.h5
 ./tools/h5repack/testfiles/h5repack_layouto.h5
@@ -1760,13 +1820,16 @@
 ./tools/h5jam/getub.c
 
 # test files for jam
+./tools/h5jam/testfiles/h5jam-help.txt
+./tools/h5jam/testfiles/h5unjam-help.txt
 ./tools/h5jam/testfiles/twithub.h5
+./tools/h5jam/testfiles/twithub513.h5
 ./tools/h5jam/testfiles/u10.txt
 ./tools/h5jam/testfiles/tall.h5
 ./tools/h5jam/testfiles/u511.txt
 ./tools/h5jam/testfiles/u512.txt
-./tools/h5jam/testfiles/twithub513.h5
 ./tools/h5jam/testfiles/u513.txt
+./tools/h5jam/testfiles/h5jam-ub-nohdf5.txt
 
 # test files for h5copy
 ./tools/h5copy/testfiles/h5copytst.h5
@@ -1901,8 +1964,11 @@
 ./hl/fortran/Makefile.in
 ./hl/fortran/examples/Makefile.am
 ./hl/fortran/examples/Makefile.in
+./hl/fortran/examples/ex_ds1.f90
 ./hl/fortran/examples/exlite.f90
 ./hl/fortran/examples/run-hlfortran-ex.sh.in
+./hl/fortran/src/H5DSfc.c
+./hl/fortran/src/H5DSff.f90
 ./hl/fortran/src/H5IMcc.c
 ./hl/fortran/src/H5IMcc.h
 ./hl/fortran/src/H5IMfc.c
@@ -1916,6 +1982,7 @@
 ./hl/fortran/src/Makefile.in
 ./hl/fortran/test/Makefile.am
 ./hl/fortran/test/Makefile.in
+./hl/fortran/test/tstds.f90
 ./hl/fortran/test/tstimage.f90
 ./hl/fortran/test/tstlite.f90
 ./hl/fortran/test/tsttable.f90
@@ -2009,6 +2076,7 @@
 ./config/cmake/mccacheinit.cmake
 ./config/cmake/CTest.cmake
 ./config/cmake/grepTest.cmake
+./config/cmake/prunTest.cmake
 ./config/cmake/runTest.cmake
 ./config/cmake/userblockTest.cmake
 ./config/cmake/vfdTest.cmake
@@ -2016,6 +2084,7 @@
 ./config/cmake/ConfigureChecks.cmake
 ./config/cmake/CPack.cmake
 ./config/cmake/NSIS.template.in
+./config/cmake/NSIS.InstallOptions.ini.in
 ./CMakeLists.txt
 ./CTestConfig.cmake
 ./c++/CMakeLists.txt
diff --git a/Makefile.am b/Makefile.am
old mode 100755
new mode 100644
diff --git a/Makefile.in b/Makefile.in
index 1d25e4f..9060c86 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -205,6 +205,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -225,10 +226,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -272,7 +275,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/README.txt b/README.txt
index a44ec1f..7fc0952 100644
--- a/README.txt
+++ b/README.txt
@@ -1,4 +1,4 @@
-HDF5 version 1.8.7 released on Tue May 10 09:24:43 CDT 2011
+HDF5 version 1.8.8 released on 2011-11-15
 Please refer to the release_docs/INSTALL file for installation instructions.
 ------------------------------------------------------------------------------
 
diff --git a/bin/output_filter.sh b/bin/output_filter.sh
new file mode 100644
index 0000000..58f1c48
--- /dev/null
+++ b/bin/output_filter.sh
@@ -0,0 +1,101 @@
+## Copyright by The HDF Group.
+## 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 at hdfgroup.org.
+
+# This contains function definitions of output filtering.
+# This file should only be sourced in by another shell script.
+#
+# Programmer: Albert Cheng
+# Created Date: 2011/5/3
+
+
+# Some systems will dump some messages to stdout for various reasons.
+# Remove them from the stdout result file.
+# $1 is the file name of the file to be filtered.
+# Cases of filter needed:
+# 1. Sandia Red-Storm
+#    yod always prints these two lines at the beginning.
+#    LibLustre: NAL NID: 0004a605 (5)
+#    Lustre: OBD class driver Build Version: 1, info at clusterfs.com
+# 2. LANL Lambda
+#    mpijob mirun -np always add an extra line at the end like:
+#    P4 procgroup file is /users/acheng/.lsbatch/host10524.l82
+STDOUT_FILTER() {
+    result_file=$1
+    tmp_file=/tmp/h5test_tmp_$$
+    # Filter Sandia Red-Storm yod messages.
+    cp $result_file $tmp_file
+    sed -e '/^LibLustre:/d' -e '/^Lustre:/d' \
+	< $tmp_file > $result_file
+    # Filter LANL Lambda mpirun message.
+    cp $result_file $tmp_file
+    sed -e '/^P4 procgroup file is/d' \
+	< $tmp_file > $result_file
+    # cleanup
+    rm -f $tmp_file
+}
+
+
+# Some systems will dump some messages to stderr for various reasons.
+# Remove them from the stderr result file.
+# $1 is the file name of the file to be filtered.
+# Cases of filter needed:
+# 1. MPE:
+# In parallel mode and if MPE library is used, it prints the following
+# two message lines whether the MPE tracing is used or not.
+#    Writing logfile.
+#    Finished writing logfile.
+# 2. LANL MPI:
+# The LANL MPI will print some messages like the following,
+#    LA-MPI: *** mpirun (1.5.10)
+#    LA-MPI: *** 3 process(es) on 2 host(s): 2*fln21 1*fln22
+#    LA-MPI: *** libmpi (1.5.10)
+#    LA-MPI: *** Copyright 2001-2004, ACL, Los Alamos National Laboratory
+# 3. h5diff debug output:
+#    Debug output all have prefix "h5diff debug: ".
+# 4. AIX system prints messages like these when it is aborting:
+#    ERROR: 0031-300  Forcing all remote tasks to exit due to exit code 1 in task 0
+#    ERROR: 0031-250  task 4: Terminated
+#    ERROR: 0031-250  task 3: Terminated
+#    ERROR: 0031-250  task 2: Terminated
+#    ERROR: 0031-250  task 1: Terminated
+# 5. LLNL Blue-Gene mpirun prints messages like there when it exit non-zero:
+#    <Apr 12 15:01:49.075658> BE_MPI (ERROR): The error message in the job record is as follows:
+#    <Apr 12 15:01:49.075736> BE_MPI (ERROR):   "killed by exit(1) on node 0"
+STDERR_FILTER() {
+    result_file=$1
+    tmp_file=/tmp/h5test_tmp_$$
+    # Filter LLNL Blue-Gene error messages in both serial and parallel modes
+    # since mpirun is used in both modes.
+    cp $result_file $tmp_file
+    sed -e '/ BE_MPI (ERROR): /d' \
+	< $tmp_file > $result_file
+    # Filter MPE messages
+    if test -n "$pmode"; then
+	cp $result_file $tmp_file
+	sed -e '/^Writing logfile./d' -e '/^Finished writing logfile./d' \
+	    < $tmp_file > $result_file
+    fi
+    # Filter LANL MPI messages
+    # and LLNL srun messages
+    # and AIX error messages
+    if test -n "$pmode"; then
+	cp $result_file $tmp_file
+	sed -e '/^LA-MPI:/d' -e '/^srun:/d' -e '/^ERROR:/d' \
+	    < $tmp_file > $result_file
+    fi
+    # Filter h5diff debug output
+	cp $result_file $tmp_file
+	sed -e '/^h5diff debug: /d' \
+	    < $tmp_file > $result_file
+    # clean up temporary files.
+    rm -f $tmp_file
+}
diff --git a/bin/release b/bin/release
index 0d547df..b7b4d2c 100755
--- a/bin/release
+++ b/bin/release
@@ -97,6 +97,7 @@ VERS_OLD=
 test "$VERS" || exit 1
 verbose=yes
 check=yes
+release_date=`date +%F`
 today=`date +%Y%m%d`
 pmode='no'
 tmpdir="../#release_tmp.$$"	# tmp work directory
@@ -211,7 +212,7 @@ cp -p Makefile.dist Makefile
 # Update README.txt and release_docs/RELEASE.txt with release information in
 # line 1.
 for f in README.txt release_docs/RELEASE.txt; do
-    echo "HDF5 version $VERS released on `date`" >$f.x
+    echo "HDF5 version $VERS released on $release_date" >$f.x
     sed -e 1d $f >>$f.x
     mv $f.x $f
     # Make sure new files are of the right access mode
diff --git a/bin/trace b/bin/trace
index 951d349..579b564 100755
--- a/bin/trace
+++ b/bin/trace
@@ -36,7 +36,9 @@ $Source = "";
                "H5D_fill_time_t"            => "Df",
                "H5D_fill_value_t"           => "DF",
 	       "H5FD_mpio_chunk_opt_t"      => "Dh",
+               "H5D_mpio_actual_io_mode_t"  => "Di",
                "H5D_layout_t"               => "Dl",
+               "H5D_mpio_actual_chunk_opt_mode_t" => "Do",
                "H5D_space_status_t"         => "Ds",
                "H5FD_mpio_xfer_t"           => "Dt",
                "herr_t"                     => "e",
@@ -84,6 +86,8 @@ $Source = "";
                "H5T_sign_t"                 => "Ts",
                "H5T_class_t"                => "Tt",
                "H5T_str_t"                  => "Tz",
+               "unsigned long"              => "Ul",
+               "unsigned long long"         => "UL",
                "void"                       => "x",
                "FILE"                       => "x",
                "H5A_operator_t"             => "x",
@@ -214,6 +218,9 @@ sub rewrite_func ($$$$$) {
     my %names;
 
     for $arg (@args) {
+      if($arg=~/\w*\.{3}\w*/){
+        next;
+      }
       unless ($arg=~/^(([a-z_A-Z]\w*\s+)+\**)
 	      ([a-z_A-Z]\w*)(\[.*?\])?
 	      (\s*\/\*\s*(in|out|in_out)\s*\*\/)?\s*$/x) {
diff --git a/c++/Makefile.in b/c++/Makefile.in
index 49be051..0263607 100644
--- a/c++/Makefile.in
+++ b/c++/Makefile.in
@@ -178,6 +178,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -198,10 +199,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -245,7 +248,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/c++/examples/Makefile.in b/c++/examples/Makefile.in
index 32eece2..2f35cf9 100644
--- a/c++/examples/Makefile.in
+++ b/c++/examples/Makefile.in
@@ -145,6 +145,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -165,10 +166,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -212,7 +215,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/c++/src/Makefile.in b/c++/src/Makefile.in
index c42d638..91cbcef 100644
--- a/c++/src/Makefile.in
+++ b/c++/src/Makefile.in
@@ -211,6 +211,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -231,10 +232,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -278,7 +281,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
@@ -429,7 +431,7 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog
 # Add libtool shared library version numbers to the HDF5 library
 # See libtool versioning documentation online.
 LT_VERS_INTERFACE = 7
-LT_VERS_REVISION = 1
+LT_VERS_REVISION = 2
 LT_VERS_AGE = 0
 
 # Include src directory
diff --git a/c++/test/CMakeLists.txt b/c++/test/CMakeLists.txt
index b6e645a..84c3920 100644
--- a/c++/test/CMakeLists.txt
+++ b/c++/test/CMakeLists.txt
@@ -43,6 +43,13 @@ TARGET_LINK_LIBRARIES (cpp_testhdf5
     ${HDF5_TEST_LIB_TARGET}
 )
 
+ADD_CUSTOM_COMMAND (
+    TARGET     cpp_testhdf5
+    POST_BUILD
+    COMMAND    ${CMAKE_COMMAND}
+    ARGS       -E copy_if_different ${HDF5_CPP_TEST_SOURCE_DIR}/th5s.h5 ${PROJECT_BINARY_DIR}/th5s.h5
+)
+
 ADD_TEST (NAME cpp_testhdf5 COMMAND $<TARGET_FILE:cpp_testhdf5>)
 
 IF (HDF5_TEST_VFD)
diff --git a/c++/test/Makefile.in b/c++/test/Makefile.in
index 62ef709..f7e4958 100644
--- a/c++/test/Makefile.in
+++ b/c++/test/Makefile.in
@@ -177,6 +177,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -197,10 +198,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -244,7 +247,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/config/cmake/CTestCustom.cmake b/config/cmake/CTestCustom.cmake
index 1ae77bc..786008f 100755
--- a/config/cmake/CTestCustom.cmake
+++ b/config/cmake/CTestCustom.cmake
@@ -20,8 +20,16 @@ SET (CTEST_CUSTOM_MEMCHECK_IGNORE
     error_test       #uses runTest.cmake
     err_compat       #uses runTest.cmake
     links_env        #uses runTest.cmake
+    testlibinfo      #uses grepTest.cmake
+    h5test-clear-testhdf5-objects
     h5test-clear-objects
-    h5perform-clear-objects
+    h5test-clear-cache-objects
+    h5test-clear-cache_api-objects
+    h5test-clear-ttsafe-objects
+    h5test-clear-err_compat-objects
+    h5test-clear-error_test-objects
+    h5test-clear-links_env-objects
+    PERFORM_h5perform-clear-objects
     hl_test-clear-objects
     hl_fortran_test-clear-objects
     ######### tools/h5copy #########
@@ -41,22 +49,6 @@ SET (CTEST_CUSTOM_MEMCHECK_IGNORE
     H5DUMP-XML-clearall-objects
     ######### tools/h5import #########
     H5IMPORT-clear-objects
-    H5IMPORT-ASCII_F32-clear-objects
-    H5IMPORT-ASCII_UI16-clear-objects
-    H5IMPORT-ASCII_UI32-clear-objects
-    H5IMPORT-ASCII_I8-clear-objects
-    H5IMPORT-ASCII_I16-clear-objects
-    H5IMPORT-ASCII_I32-clear-objects
-    H5IMPORT-ASCII_F64_R1-clear-objects
-    H5IMPORT-BINARY_I8_EOF-clear-objects
-    H5IMPORT-STR-clear-objects
-    H5IMPORT-BINARY_UI32-clear-objects
-    H5IMPORT-BINARY_UI16-clear-objects
-    H5IMPORT-BINARY_I32-clear-objects
-    H5IMPORT-BINARY_I8-clear-objects
-    H5IMPORT-BINARY_I16-clear-objects
-    H5IMPORT-BINARY_F64-clear-objects
-    H5IMPORT-ASCII_F64-clear-objects
     ######### tools/h5jam #########
     H5JAM-SETUP-N_twithub_u10_c-clear-objects
     H5JAM-SETUP-N_twithub_u10_c
@@ -222,40 +214,40 @@ SET (CTEST_CUSTOM_MEMCHECK_IGNORE
     H5MKGRP_CMP-clear-h5mkgrp_version
     H5MKGRP-clear-h5mkgrp_single
     H5MKGRP-h5mkgrp_single                              #uses runTest.cmake
-    H5MKGRP-H5LS-h5mkgrp_single                         #uses runTest.cmake
+    H5MKGRP-h5ls-h5mkgrp_single                         #uses runTest.cmake
     H5MKGRP-clear-h5mkgrp_single-v
     H5MKGRP-h5mkgrp_single-v                            #uses runTest.cmake
-    H5MKGRP-H5LS-h5mkgrp_single-v                       #uses runTest.cmake
+    H5MKGRP-h5ls-h5mkgrp_single-v                       #uses runTest.cmake
     H5MKGRP-clear-h5mkgrp_single-p
     H5MKGRP-h5mkgrp_single-p                            #uses runTest.cmake
-    H5MKGRP-H5LS-h5mkgrp_single-p                       #uses runTest.cmake
+    H5MKGRP-h5ls-h5mkgrp_single-p                       #uses runTest.cmake
     H5MKGRP-clear-h5mkgrp_single_latest-l
     H5MKGRP-h5mkgrp_single_latest-l                     #uses runTest.cmake
-    H5MKGRP-H5LS-h5mkgrp_single_latest-l                #uses runTest.cmake
+    H5MKGRP-h5ls-h5mkgrp_single_latest-l                #uses runTest.cmake
     H5MKGRP-clear-h5mkgrp_several
     H5MKGRP-h5mkgrp_several                             #uses runTest.cmake
-    H5MKGRP-H5LS-h5mkgrp_several                        #uses runTest.cmake
+    H5MKGRP-h5ls-h5mkgrp_several                        #uses runTest.cmake
     H5MKGRP-clear-h5mkgrp_several-v
     H5MKGRP-h5mkgrp_several-v                           #uses runTest.cmake
-    H5MKGRP-H5LS-h5mkgrp_several-v                      #uses runTest.cmake
+    H5MKGRP-h5ls-h5mkgrp_several-v                      #uses runTest.cmake
     H5MKGRP-clear-h5mkgrp_several-p
     H5MKGRP-h5mkgrp_several-p                           #uses runTest.cmake
-    H5MKGRP-H5LS-h5mkgrp_several-p                      #uses runTest.cmake
+    H5MKGRP-h5ls-h5mkgrp_several-p                      #uses runTest.cmake
     H5MKGRP-clear-h5mkgrp_several_latest-l
     H5MKGRP-h5mkgrp_several_latest-l                    #uses runTest.cmake
-    H5MKGRP-H5LS-h5mkgrp_several_latest-l               #uses runTest.cmake
+    H5MKGRP-h5ls-h5mkgrp_several_latest-l               #uses runTest.cmake
     H5MKGRP-clear-h5mkgrp_nested-p
     H5MKGRP-h5mkgrp_nested-p                            #uses runTest.cmake
-    H5MKGRP-H5LS-h5mkgrp_nested-p                       #uses runTest.cmake
+    H5MKGRP-h5ls-h5mkgrp_nested-p                       #uses runTest.cmake
     H5MKGRP-clear-h5mkgrp_nested_latest-lp
     H5MKGRP-h5mkgrp_nested_latest-lp                    #uses runTest.cmake
-    H5MKGRP-H5LS-h5mkgrp_nested_latest-lp               #uses runTest.cmake
+    H5MKGRP-h5ls-h5mkgrp_nested_latest-lp               #uses runTest.cmake
     H5MKGRP-clear-h5mkgrp_nested_mult-p
     H5MKGRP-h5mkgrp_nested_mult-p                       #uses runTest.cmake
-    H5MKGRP-H5LS-h5mkgrp_nested_mult-p                  #uses runTest.cmake
+    H5MKGRP-h5ls-h5mkgrp_nested_mult-p                  #uses runTest.cmake
     H5MKGRP-clear-h5mkgrp_nested_mult_latest-lp
     H5MKGRP-h5mkgrp_nested_mult_latest-lp               #uses runTest.cmake
-    H5MKGRP-H5LS-h5mkgrp_nested_mult_latest-lp          #uses runTest.cmake
+    H5MKGRP-h5ls-h5mkgrp_nested_mult_latest-lp          #uses runTest.cmake
     ######### examples #########
     EXAMPLES-clear-objects
     cpp_ex-clear-objects
diff --git a/config/cmake/ConfigureChecks.cmake b/config/cmake/ConfigureChecks.cmake
index a7f9228..be03e52 100644
--- a/config/cmake/ConfigureChecks.cmake
+++ b/config/cmake/ConfigureChecks.cmake
@@ -10,6 +10,7 @@ INCLUDE (${CMAKE_ROOT}/Modules/CheckSymbolExists.cmake)
 INCLUDE (${CMAKE_ROOT}/Modules/CheckTypeSize.cmake)
 INCLUDE (${CMAKE_ROOT}/Modules/CheckVariableExists.cmake)
 INCLUDE (${CMAKE_ROOT}/Modules/CheckFortranFunctionExists.cmake)
+INCLUDE (${CMAKE_ROOT}/Modules/TestBigEndian.cmake)
 
 #-----------------------------------------------------------------------------
 # Always SET this for now IF we are on an OS X box
@@ -128,8 +129,12 @@ ENDMACRO (CHECK_LIBRARY_EXISTS_CONCAT)
 
 SET (WINDOWS)
 IF (WIN32)
+  SET (H5_HAVE_WIN32_API 1)
   IF (NOT UNIX AND NOT CYGWIN AND NOT MINGW)
     SET (WINDOWS 1)
+    IF (MSVC_IDE)
+      SET (H5_HAVE_VISUAL_STUDIO 1)
+    ENDIF (MSVC_IDE)
   ENDIF (NOT UNIX AND NOT CYGWIN AND NOT MINGW)
 ENDIF (WIN32)
 
@@ -146,19 +151,14 @@ ENDIF (WIN32)
 #
 IF (WINDOWS)
   SET (H5_HAVE_WINDOWS 1)
-#  SET (H5_WINDOWS_USE_STDIO 0)
   # ----------------------------------------------------------------------
   # Set the flag to indicate that the machine has window style pathname,
   # that is, "drive-letter:\" (e.g. "C:") or "drive-letter:/" (e.g. "C:/").
   # (This flag should be _unset_ for all machines, except for Windows)
-  #
   SET (H5_HAVE_WINDOW_PATH 1)
-  SET (WINDOWS_MAX_BUF (1024 * 1024 * 1024))
-  SET (H5_DEFAULT_VFD H5FD_WINDOWS)
   SET (LINK_LIBS ${LINK_LIBS} "kernel32")
-ELSE (WINDOWS)
-  SET (H5_DEFAULT_VFD H5FD_SEC2)
 ENDIF (WINDOWS)
+SET (H5_DEFAULT_VFD H5FD_SEC2)
 
 IF (WINDOWS)
   SET (H5_HAVE_IO_H 1)
@@ -222,6 +222,9 @@ SET (USE_INCLUDES "")
 IF (WINDOWS)
   SET (USE_INCLUDES ${USE_INCLUDES} "windows.h")
 ENDIF (WINDOWS)
+
+TEST_BIG_ENDIAN(H5_WORDS_BIGENDIAN)
+
 #-----------------------------------------------------------------------------
 # Check IF header file exists and add it to the list.
 #-----------------------------------------------------------------------------
@@ -258,6 +261,7 @@ ELSE (CMAKE_SYSTEM_NAME MATCHES "OSF")
 ENDIF (CMAKE_SYSTEM_NAME MATCHES "OSF")
 CHECK_INCLUDE_FILE_CONCAT ("sys/time.h"      H5_HAVE_SYS_TIME_H)
 CHECK_INCLUDE_FILE_CONCAT ("time.h"          H5_HAVE_TIME_H)
+CHECK_INCLUDE_FILE_CONCAT ("mach/mach_time.h" H5_HAVE_MACH_MACH_TIME_H)
 CHECK_INCLUDE_FILE_CONCAT ("sys/timeb.h"     H5_HAVE_SYS_TIMEB_H)
 CHECK_INCLUDE_FILE_CONCAT ("sys/types.h"     H5_HAVE_SYS_TYPES_H)
 CHECK_INCLUDE_FILE_CONCAT ("unistd.h"        H5_HAVE_UNISTD_H)
@@ -291,16 +295,43 @@ ENDIF (H5_HAVE_STDINT_H AND CMAKE_CXX_COMPILER_LOADED)
 SET (LINUX_LFS 0)
 
 SET (HDF5_EXTRA_FLAGS)
-IF (CMAKE_SYSTEM MATCHES "Linux-([3-9]\\.[0-9]|2\\.[4-9])\\.")
+#IF (CMAKE_SYSTEM MATCHES "Linux-([3-9]\\.[0-9]|2\\.[4-9])\\.")
+IF (NOT WINDOWS)
   # Linux Specific flags
   SET (HDF5_EXTRA_FLAGS -D_POSIX_SOURCE -D_BSD_SOURCE)
   OPTION (HDF5_ENABLE_LARGE_FILE "Enable support for large (64-bit) files on Linux." ON)
   IF (HDF5_ENABLE_LARGE_FILE)
-    SET (LARGEFILE 1)
-    SET (HDF5_EXTRA_FLAGS ${HDF5_EXTRA_FLAGS} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE)
+    SET (msg "Performing TEST_LFS_WORKS")
+    TRY_RUN (TEST_LFS_WORKS_RUN   TEST_LFS_WORKS_COMPILE
+        ${HDF5_BINARY_DIR}/CMake
+        ${HDF5_RESOURCES_DIR}/HDF5Tests.c
+        CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=-DTEST_LFS_WORKS
+        OUTPUT_VARIABLE OUTPUT
+    )
+    IF (TEST_LFS_WORKS_COMPILE)
+      IF (TEST_LFS_WORKS_RUN  MATCHES 0)
+        SET (TEST_LFS_WORKS 1 CACHE INTERNAL ${msg})
+        SET (LARGEFILE 1)
+        SET (HDF5_EXTRA_FLAGS ${HDF5_EXTRA_FLAGS} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE)
+        MESSAGE (STATUS "${msg}... yes")
+      ELSE (TEST_LFS_WORKS_RUN  MATCHES 0)
+        SET (TEST_LFS_WORKS "" CACHE INTERNAL ${msg})
+        MESSAGE (STATUS "${msg}... no")
+        FILE (APPEND ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log
+              "Test TEST_LFS_WORKS Run failed with the following output and exit code:\n ${OUTPUT}\n"
+        )
+      ENDIF (TEST_LFS_WORKS_RUN  MATCHES 0)
+    ELSE (TEST_LFS_WORKS_COMPILE )
+      SET (TEST_LFS_WORKS "" CACHE INTERNAL ${msg})
+      MESSAGE (STATUS "${msg}... no")
+      FILE (APPEND ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log
+          "Test TEST_LFS_WORKS Compile failed with the following output:\n ${OUTPUT}\n"
+      )
+    ENDIF (TEST_LFS_WORKS_COMPILE)
   ENDIF (HDF5_ENABLE_LARGE_FILE)
   SET (CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} ${HDF5_EXTRA_FLAGS})
-ENDIF (CMAKE_SYSTEM MATCHES "Linux-([3-9]\\.[0-9]|2\\.[4-9])\\.")
+ENDIF (NOT WINDOWS)
+#ENDIF (CMAKE_SYSTEM MATCHES "Linux-([3-9]\\.[0-9]|2\\.[4-9])\\.")
 
 ADD_DEFINITIONS (${HDF5_EXTRA_FLAGS})
 
@@ -586,7 +617,7 @@ ENDIF (NOT WINDOWS)
 #-----------------------------------------------------------------------------
 # Check if InitOnceExecuteOnce is available
 #-----------------------------------------------------------------------------
-IF (WINDOWS)
+IF (WINDOWS AND NOT HDF5_NO_IOEO_TEST)
   MESSAGE (STATUS "Checking for InitOnceExecuteOnce:")
   IF("${H5_HAVE_IOEO}" MATCHES "^${H5_HAVE_IOEO}$")
     IF (LARGEFILE)
@@ -644,8 +675,8 @@ IF (WINDOWS)
         "Return value: ${HAVE_IOEO_EXITCODE}\n")
     ENDIF("${HAVE_IOEO_EXITCODE}" EQUAL 0)
   ENDIF("${H5_HAVE_IOEO}" MATCHES "^${H5_HAVE_IOEO}$")
-ENDIF (WINDOWS)
-	
+ENDIF (WINDOWS AND NOT HDF5_NO_IOEO_TEST)
+  
 
 #-----------------------------------------------------------------------------
 # Option to see if GPFS is available on this filesystem --enable-gpfs
diff --git a/config/cmake/FindHDF5.cmake b/config/cmake/FindHDF5.cmake
index 03820e9..33532b0 100644
--- a/config/cmake/FindHDF5.cmake
+++ b/config/cmake/FindHDF5.cmake
@@ -63,8 +63,8 @@ FIND_PATH (HDF5_ROOT_DIR "hdf5-config.cmake"
     HINTS ${_HDF5_HINTS}
     PATHS ${_HDF5_PATHS}
     PATH_SUFFIXES
-        lib/cmake/hdf5-1.8.7
-        share/cmake/hdf5-1.8.7
+        lib/cmake/hdf5
+        share/cmake/hdf5
 )
 
 FIND_PATH (HDF5_INCLUDE_DIRS "H5public.h"
diff --git a/config/cmake/H5pubconf.h.in b/config/cmake/H5pubconf.h.in
index cd05639..70c6e50 100644
--- a/config/cmake/H5pubconf.h.in
+++ b/config/cmake/H5pubconf.h.in
@@ -6,12 +6,11 @@
 /* Define if the Windows virtual file driver should be compiled */
 #cmakedefine H5_HAVE_WINDOWS @H5_HAVE_WINDOWS@
 
-/* Define if the Windows virtual file driver should use buffered IO functions */
-/* #undef WINDOWS_USE_STDIO */
+/* Define if on the Windows platform and default WIN32 API */
+#cmakedefine H5_HAVE_WIN32_API @H5_HAVE_WIN32_API@
 
-/* Define the maximum write size for the Windows file driver.  Larger writes
-   will be split into many writes.  Safe values are 1 <= WINDOWS_MAX_BUF <= 2GB-1. */
-#cmakedefine WINDOWS_MAX_BUF (1024 * 1024 * 1024)
+/* Define if using a Windows compiler (i.e. Visual Studio) */
+#cmakedefine H5_HAVE_VISUAL_STUDIO @H5_HAVE_VISUAL_STUDIO@
 
 /* Defined if HDF5 was built with CMake AND build as a shared library */
 #cmakedefine H5_BUILT_AS_DYNAMIC_LIB @H5_BUILT_AS_DYNAMIC_LIB@
@@ -209,9 +208,6 @@
 /* Define to 1 if you have the <gpfs.h> header file. */
 #cmakedefine H5_HAVE_GPFS_H @H5_HAVE_GPFS_H@
 
-/* Define if h5dump packed bits feature is enabled */
-#cmakedefine H5_HAVE_H5DUMP_PACKED_BITS @H5_HAVE_H5DUMP_PACKED_BITS@
-
 /* Define if library will contain instrumentation to detect correct
    optimization operation */
 #cmakedefine H5_HAVE_INSTRUMENTED_LIBRARY @H5_HAVE_INSTRUMENTED_LIBRARY@
@@ -270,6 +266,9 @@
 /* Define to 1 if you have the `lstat' function. */
 #cmakedefine H5_HAVE_LSTAT @H5_HAVE_LSTAT@
 
+/* Define to 1 if you have the <mach/mach_time.h> header file. */
+#cmakedefine H5_HAVE_MACH_MACH_TIME_H @H5_HAVE_MACH_MACH_TIME_H@
+
 /* Define to 1 if you have the <memory.h> header file. */
 #cmakedefine H5_HAVE_MEMORY_H @H5_HAVE_MEMORY_H@
 
@@ -517,17 +516,10 @@
 /* Define if the metadata trace file code is to be compiled in */
 #cmakedefine H5_METADATA_TRACE_FILE @H5_METADATA_TRACE_FILE@
 
-/* Define if your system can handle complicated MPI derived datatype
-   correctly. */
-#cmakedefine H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS @H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS@
-
 /* Define if your system's `MPI_File_set_size' function works for files over
    2GB. */
 #cmakedefine H5_MPI_FILE_SET_SIZE_BIG @H5_MPI_FILE_SET_SIZE_BIG@
 
-/* Define if your system can handle special collective IO properly. */
-#cmakedefine H5_MPI_SPECIAL_COLLECTIVE_IO_WORKS @H5_MPI_SPECIAL_COLLECTIVE_IO_WORKS@
-
 /* Define if we can violate pointer alignment restrictions */
 #cmakedefine H5_NO_ALIGNMENT_RESTRICTIONS @H5_NO_ALIGNMENT_RESTRICTIONS@
 
@@ -762,6 +754,8 @@
 # endif
 #endif
 
+#cmakedefine WORDS_BIGENDIAN @H5_WORDS_BIGENDIANR@
+
 /* Number of bits in a file offset, on hosts where this is settable. */
 #cmakedefine _FILE_OFFSET_BITS
 
@@ -793,4 +787,4 @@
 #undef inline
 #endif
 
-#endif
\ No newline at end of file
+#endif
diff --git a/config/cmake/HDF5Macros.cmake b/config/cmake/HDF5Macros.cmake
index b9e37bb..3e6ee18 100644
--- a/config/cmake/HDF5Macros.cmake
+++ b/config/cmake/HDF5Macros.cmake
@@ -1,6 +1,6 @@
 #-------------------------------------------------------------------------------
 MACRO (H5_SET_LIB_OPTIONS libtarget libname libtype)
-  HDF_SET_LIB_OPTIONS (${libtarget} ${libname} ${libtype})
+  SET (LIB_OUT_NAME "${libname}")
   IF (${libtype} MATCHES "SHARED")
     IF (WIN32)
       SET (LIBHDF_VERSION ${HDF5_PACKAGE_VERSION_MAJOR})
@@ -8,8 +8,13 @@ MACRO (H5_SET_LIB_OPTIONS libtarget libname libtype)
       SET (LIBHDF_VERSION ${HDF5_PACKAGE_VERSION})
     ENDIF (WIN32)
     SET_TARGET_PROPERTIES (${libtarget} PROPERTIES VERSION ${LIBHDF_VERSION})
-    SET_TARGET_PROPERTIES (${libtarget} PROPERTIES SOVERSION ${LIBHDF_VERSION})
+    IF (WIN32)
+        SET (${LIB_OUT_NAME} "${LIB_OUT_NAME}-${HDF5_PACKAGE_SOVERSION}")
+    ELSE (WIN32)
+        SET_TARGET_PROPERTIES (${libtarget} PROPERTIES SOVERSION ${HDF5_PACKAGE_SOVERSION})
+    ENDIF (WIN32)
   ENDIF (${libtype} MATCHES "SHARED")
+  HDF_SET_LIB_OPTIONS (${libtarget} ${LIB_OUT_NAME} ${libtype})
 
   #-- Apple Specific install_name for libraries
   IF (APPLE)
diff --git a/config/cmake/HDF5Tests.c b/config/cmake/HDF5Tests.c
index f580bbc..4887454 100644
--- a/config/cmake/HDF5Tests.c
+++ b/config/cmake/HDF5Tests.c
@@ -336,6 +336,37 @@ int main()
 }
 #endif
 
+#ifdef TEST_LFS_WORKS
+/* Return 0 when LFS is available and 1 otherwise.  */
+#define _LARGEFILE_SOURCE
+#define _LARGEFILE64_SOURCE
+#define _LARGE_FILES
+#define _FILE_OFFSET_BITS 64
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <assert.h>
+#include <stdio.h>
+
+int main(int argc, char **argv)
+{
+  /* check that off_t can hold 2^63 - 1 and perform basic operations... */
+#define OFF_T_64 (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  if (OFF_T_64 % 2147483647 != 1)
+    return 1;
+
+  // stat breaks on SCO OpenServer
+  struct stat buf;
+  stat( argv[0], &buf );
+  if (!S_ISREG(buf.st_mode))
+    return 2;
+
+  FILE *file = fopen( argv[0], "r" );
+  off_t offset = ftello( file );
+  fseek( file, offset, SEEK_CUR );
+  fclose( file );
+  return 0;
+}
+#endif
 
 #ifdef GETTIMEOFDAY_GIVES_TZ
 #ifdef HAVE_SYS_TIME_H
@@ -380,14 +411,14 @@ int main ()
 typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO);
 int main ()
 {
-	PGNSI pGNSI;
-	pGNSI = (PGNSI) GetProcAddress(
+  PGNSI pGNSI;
+  pGNSI = (PGNSI) GetProcAddress(
       GetModuleHandle(TEXT("kernel32.dll")), 
       "InitOnceExecuteOnce");
-	if(NULL == pGNSI)
-		return 1;
-	else
-		return 0;
+  if(NULL == pGNSI)
+    return 1;
+  else
+    return 0;
 }
 
 #endif /* HAVE_IOEO */
diff --git a/config/cmake/HDF5UseFortran.cmake b/config/cmake/HDF5UseFortran.cmake
index 1f429f5..c1c5acb 100644
--- a/config/cmake/HDF5UseFortran.cmake
+++ b/config/cmake/HDF5UseFortran.cmake
@@ -110,6 +110,15 @@ CHECK_FORTRAN_FEATURE(RealIsNotDouble
   FORTRAN_DEFAULT_REAL_NOT_DOUBLE
 )
 
+CHECK_FORTRAN_FEATURE(iso_c_binding
+  "
+       PROGRAM main
+            USE iso_c_binding
+       END PROGRAM
+  "
+  FORTRAN_HAVE_ISO_C_BINDING
+)
+
 #-----------------------------------------------------------------------------
 # Add debug information (intel Fortran : JB)
 #-----------------------------------------------------------------------------
diff --git a/config/cmake/HDFMacros.cmake b/config/cmake/HDFMacros.cmake
index d8efad0..f58b86e 100644
--- a/config/cmake/HDFMacros.cmake
+++ b/config/cmake/HDFMacros.cmake
@@ -15,7 +15,7 @@ MACRO (EXTERNAL_JPEG_LIBRARY compress_type jpeg_pic)
         INSTALL_COMMAND ""
         CMAKE_ARGS
             -DBUILD_SHARED_LIBS:BOOL=OFF
-            -DJPEG_EXTERNALLY_CONFIGURED:BOOL=ON
+            -DJPEG_EXTERNALLY_CONFIGURED:BOOL=OFF
             -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
             -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
             -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
@@ -29,7 +29,7 @@ MACRO (EXTERNAL_JPEG_LIBRARY compress_type jpeg_pic)
         INSTALL_COMMAND ""
         CMAKE_ARGS
             -DBUILD_SHARED_LIBS:BOOL=OFF
-            -DJPEG_EXTERNALLY_CONFIGURED:BOOL=ON
+            -DJPEG_EXTERNALLY_CONFIGURED:BOOL=OFF
             -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
             -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
             -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
@@ -48,13 +48,26 @@ MACRO (EXTERNAL_JPEG_LIBRARY compress_type jpeg_pic)
   ELSE (${BLDTYPE} MATCHES "Debug")
     SET (DBG_EXT "")
   ENDIF (${BLDTYPE} MATCHES "Debug")
-  SET (EXTERNAL_LIBRARY_LIST ${EXTERNAL_LIBRARY_LIST} ${JPEG_LIBRARY})
 
-  IF (WIN32 AND NOT MINGW)
-    SET (JPEG_LIBRARY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BLDTYPE}/libjpeg${DBG_EXT}${CMAKE_STATIC_LIBRARY_SUFFIX}")
+  # Create imported target szip
+  ADD_LIBRARY(jpeg STATIC IMPORTED)
+  ADD_DEPENDENCIES (jpeg JPEG)
+
+   IF (WIN32 AND NOT MINGW)
+    SET_TARGET_PROPERTIES(jpeg PROPERTIES
+        IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BLDTYPE}/libjpeg${DBG_EXT}${CMAKE_STATIC_LIBRARY_SUFFIX}"
+        IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+    )
   ELSE (WIN32 AND NOT MINGW)
-    SET (JPEG_LIBRARY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libjpeg${DBG_EXT}${CMAKE_STATIC_LIBRARY_SUFFIX}")
+    SET_TARGET_PROPERTIES(jpeg PROPERTIES
+        IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libjpeg${DBG_EXT}${CMAKE_STATIC_LIBRARY_SUFFIX}"
+        IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+    )
   ENDIF (WIN32 AND NOT MINGW)
+
+#  INCLUDE (${BINARY_DIR}/JPEG-targets.cmake)  
+  SET (JPEG_LIBRARY "jpeg")
+  
   SET (JPEG_INCLUDE_DIR_GEN "${BINARY_DIR}")
   SET (JPEG_INCLUDE_DIR "${SOURCE_DIR}/src")
   SET (JPEG_FOUND 1)
@@ -83,7 +96,7 @@ MACRO (EXTERNAL_SZIP_LIBRARY compress_type libtype encoding)
         INSTALL_COMMAND ""
         CMAKE_ARGS
             -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS}
-            -DSZIP_EXTERNALLY_CONFIGURED:BOOL=ON
+            -DSZIP_EXTERNALLY_CONFIGURED:BOOL=OFF
             -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
             -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
             -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
@@ -97,7 +110,7 @@ MACRO (EXTERNAL_SZIP_LIBRARY compress_type libtype encoding)
         INSTALL_COMMAND ""
         CMAKE_ARGS
             -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS}
-            -DSZIP_EXTERNALLY_CONFIGURED:BOOL=ON
+            -DSZIP_EXTERNALLY_CONFIGURED:BOOL=OFF
             -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
             -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
             -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
@@ -117,21 +130,39 @@ MACRO (EXTERNAL_SZIP_LIBRARY compress_type libtype encoding)
     SET (DBG_EXT "")
   ENDIF (${BLDTYPE} MATCHES "Debug")
 
+  # Create imported target szip
+  ADD_LIBRARY(szip ${libtype} IMPORTED)
+  ADD_DEPENDENCIES (szip SZIP)
+
   IF (${libtype} MATCHES "SHARED")
     IF (WIN32 AND NOT MINGW)
-      SET (SZIP_LIBRARY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BLDTYPE}/${CMAKE_IMPORT_LIBRARY_PREFIX}szip${DBG_EXT}${CMAKE_IMPORT_LIBRARY_SUFFIX}")
-      SET (EXTERNAL_LIBRARYDLL_LIST ${EXTERNAL_LIBRARYDLL_LIST} "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BLDTYPE}/${CMAKE_IMPORT_LIBRARY_PREFIX}szip${DBG_EXT}${CMAKE_SHARED_LIBRARY_SUFFIX}")
+      SET_TARGET_PROPERTIES(szip PROPERTIES
+          IMPORTED_IMPLIB "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BLDTYPE}/${CMAKE_IMPORT_LIBRARY_PREFIX}szip${DBG_EXT}${CMAKE_IMPORT_LIBRARY_SUFFIX}"
+          IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BLDTYPE}/${CMAKE_IMPORT_LIBRARY_PREFIX}szip${DBG_EXT}${CMAKE_SHARED_LIBRARY_SUFFIX}"
+      )
     ELSE (WIN32 AND NOT MINGW)
-      SET (SZIP_LIBRARY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_SHARED_LIBRARY_PREFIX}szip${DBG_EXT}${CMAKE_SHARED_LIBRARY_SUFFIX}")
+      SET_TARGET_PROPERTIES(szip PROPERTIES
+          IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_SHARED_LIBRARY_PREFIX}szip${DBG_EXT}${CMAKE_SHARED_LIBRARY_SUFFIX}"
+          IMPORTED_SONAME "${CMAKE_SHARED_LIBRARY_PREFIX}szip${DBG_EXT}${CMAKE_SHARED_LIBRARY_SUFFIX}.2.1"
+          SOVERSION "2.1"
+      )
     ENDIF (WIN32 AND NOT MINGW)
   ELSE (${libtype} MATCHES "SHARED")
     IF (WIN32 AND NOT MINGW)
-      SET (SZIP_LIBRARY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BLDTYPE}/libszip${DBG_EXT}${CMAKE_STATIC_LIBRARY_SUFFIX}")
+      SET_TARGET_PROPERTIES(szip PROPERTIES
+          IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BLDTYPE}/libszip${DBG_EXT}${CMAKE_STATIC_LIBRARY_SUFFIX}"
+          IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+      )
     ELSE (WIN32 AND NOT MINGW)
-      SET (SZIP_LIBRARY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libszip${DBG_EXT}${CMAKE_STATIC_LIBRARY_SUFFIX}")
+      SET_TARGET_PROPERTIES(szip PROPERTIES
+          IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libszip${DBG_EXT}${CMAKE_STATIC_LIBRARY_SUFFIX}"
+          IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+      )
     ENDIF (WIN32 AND NOT MINGW)
   ENDIF (${libtype} MATCHES "SHARED")
-  SET (EXTERNAL_LIBRARY_LIST ${EXTERNAL_LIBRARY_LIST} ${SZIP_LIBRARY})
+
+#  INCLUDE (${BINARY_DIR}/SZIP-targets.cmake)  
+  SET (SZIP_LIBRARY "szip")
 
   SET (SZIP_INCLUDE_DIR_GEN "${BINARY_DIR}")
   SET (SZIP_INCLUDE_DIR "${SOURCE_DIR}/src")
@@ -161,7 +192,7 @@ MACRO (EXTERNAL_ZLIB_LIBRARY compress_type libtype)
         INSTALL_COMMAND ""
         CMAKE_ARGS
             -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS}
-            -DZLIB_EXTERNALLY_CONFIGURED:BOOL=ON
+            -DZLIB_EXTERNALLY_CONFIGURED:BOOL=OFF
             -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
             -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
             -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
@@ -175,7 +206,7 @@ MACRO (EXTERNAL_ZLIB_LIBRARY compress_type libtype)
         INSTALL_COMMAND ""
         CMAKE_ARGS
             -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS}
-            -DZLIB_EXTERNALLY_CONFIGURED:BOOL=ON
+            -DZLIB_EXTERNALLY_CONFIGURED:BOOL=OFF
             -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
             -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
             -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
@@ -194,29 +225,43 @@ MACRO (EXTERNAL_ZLIB_LIBRARY compress_type libtype)
   ELSE (${BLDTYPE} MATCHES "Debug")
     SET (DBG_EXT "")
   ENDIF (${BLDTYPE} MATCHES "Debug")
+
+  # Create imported target szip
+  ADD_LIBRARY(zlib ${libtype} IMPORTED)
+  ADD_DEPENDENCIES (zlib ZLIB)
   
   IF (${libtype} MATCHES "SHARED")
     IF (WIN32 AND NOT MINGW)
-      SET (ZLIB_LIBRARY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BLDTYPE}/${CMAKE_IMPORT_LIBRARY_PREFIX}zlib1${DBG_EXT}${CMAKE_IMPORT_LIBRARY_SUFFIX}")
-      SET (EXTERNAL_LIBRARYDLL_LIST ${EXTERNAL_LIBRARYDLL_LIST} "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BLDTYPE}/${CMAKE_IMPORT_LIBRARY_PREFIX}zlib1${DBG_EXT}${CMAKE_SHARED_LIBRARY_SUFFIX}")
+      SET_TARGET_PROPERTIES(zlib PROPERTIES
+          IMPORTED_IMPLIB "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BLDTYPE}/${CMAKE_IMPORT_LIBRARY_PREFIX}zlib${DBG_EXT}${CMAKE_IMPORT_LIBRARY_SUFFIX}"
+          IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BLDTYPE}/${CMAKE_IMPORT_LIBRARY_PREFIX}zlib${DBG_EXT}${CMAKE_SHARED_LIBRARY_SUFFIX}"
+      )
     ELSE (WIN32 AND NOT MINGW)
-      SET (ZLIB_LIBRARY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_SHARED_LIBRARY_PREFIX}z${DBG_EXT}${CMAKE_SHARED_LIBRARY_SUFFIX}")
+      SET_TARGET_PROPERTIES(zlib PROPERTIES
+          IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_SHARED_LIBRARY_PREFIX}z${DBG_EXT}${CMAKE_SHARED_LIBRARY_SUFFIX}"
+          IMPORTED_SONAME "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_SHARED_LIBRARY_PREFIX}z${DBG_EXT}${CMAKE_SHARED_LIBRARY_SUFFIX}.1.2"
+          SOVERSION "1.2"
+      )
     ENDIF (WIN32 AND NOT MINGW)
   ELSE (${libtype} MATCHES "SHARED")
     IF (WIN32 AND NOT MINGW)
-      IF (HDF_LEGACY_NAMING)
-        SET (ZLIB_LIBRARY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BLDTYPE}/zlib${DBG_EXT}${CMAKE_STATIC_LIBRARY_SUFFIX}")
-      ELSE (HDF_LEGACY_NAMING)
-        SET (ZLIB_LIBRARY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BLDTYPE}/libzlib${DBG_EXT}${CMAKE_STATIC_LIBRARY_SUFFIX}")
-      ENDIF (HDF_LEGACY_NAMING)
+      SET_TARGET_PROPERTIES(zlib PROPERTIES
+          IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BLDTYPE}/libzlib${DBG_EXT}${CMAKE_STATIC_LIBRARY_SUFFIX}"
+          IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+      )
     ELSE (WIN32 AND NOT MINGW)
-      SET (ZLIB_LIBRARY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libz${DBG_EXT}${CMAKE_STATIC_LIBRARY_SUFFIX}")
+      SET_TARGET_PROPERTIES(zlib PROPERTIES
+          IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BLDTYPE}/libz${DBG_EXT}${CMAKE_STATIC_LIBRARY_SUFFIX}"
+          IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+      )
     ENDIF (WIN32 AND NOT MINGW)
   ENDIF (${libtype} MATCHES "SHARED")
-  SET (EXTERNAL_LIBRARY_LIST ${EXTERNAL_LIBRARY_LIST} ${ZLIB_LIBRARY})
+
+#  INCLUDE (${BINARY_DIR}/ZLIB-targets.cmake)  
+  SET (ZLIB_LIBRARY "zlib")
   
   SET (ZLIB_INCLUDE_DIR_GEN "${BINARY_DIR}")
-  SET (ZLIB_INCLUDE_DIR "${SOURCE_DIR}/src")
+  SET (ZLIB_INCLUDE_DIR "${SOURCE_DIR}")
   SET (ZLIB_FOUND 1)
   SET (ZLIB_LIBRARIES ${ZLIB_LIBRARY})
   SET (ZLIB_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR_GEN} ${ZLIB_INCLUDE_DIR})
@@ -337,13 +382,19 @@ ENDMACRO (HDF_SET_LIB_OPTIONS)
 
 #-------------------------------------------------------------------------------
 MACRO (TARGET_FORTRAN_WIN_PROPERTIES target addlinkflags)
-  IF (WIN32)
-    IF (MSVC)
+  IF (WIN32 AND MSVC)
+    IF (BUILD_SHARED_LIBS)
       SET_TARGET_PROPERTIES (${target}
           PROPERTIES
               COMPILE_FLAGS "/dll"
               LINK_FLAGS "/SUBSYSTEM:CONSOLE ${addlinkflags}"
       ) 
-    ENDIF (MSVC)
-  ENDIF (WIN32)
+    ELSE (BUILD_SHARED_LIBS)
+      SET_TARGET_PROPERTIES (${target}
+          PROPERTIES
+              COMPILE_FLAGS "/MD"
+              LINK_FLAGS "/SUBSYSTEM:CONSOLE ${addlinkflags}"
+      ) 
+    ENDIF (BUILD_SHARED_LIBS)
+  ENDIF (WIN32 AND MSVC)
 ENDMACRO (TARGET_FORTRAN_WIN_PROPERTIES)
diff --git a/config/cmake/NSIS.InstallOptions.ini.in b/config/cmake/NSIS.InstallOptions.ini.in
new file mode 100644
index 0000000..83ca053
--- /dev/null
+++ b/config/cmake/NSIS.InstallOptions.ini.in
@@ -0,0 +1,37 @@
+[Settings]
+NumFields=5
+
+[Field 1]
+Type=label
+Text=By default @CPACK_PACKAGE_INSTALL_DIRECTORY@ does add its directory to the system PATH.
+Left=0
+Right=-1
+Top=0
+Bottom=20
+
+[Field 2]
+Type=radiobutton
+Text=Do not add @CPACK_PACKAGE_NAME@ to the system PATH
+Left=0
+Right=-1
+Top=30
+Bottom=40
+State=0
+
+[Field 3]
+Type=radiobutton
+Text=Add @CPACK_PACKAGE_NAME@ to the system PATH for all users
+Left=0
+Right=-1
+Top=40
+Bottom=50
+State=1
+
+[Field 4]
+Type=radiobutton
+Text=Add @CPACK_PACKAGE_NAME@ to the system PATH for current user
+Left=0
+Right=-1
+Top=50
+Bottom=60
+State=0
diff --git a/config/cmake/cacheinit.cmake b/config/cmake/cacheinit.cmake
index 975a22a..1aa4aa2 100755
--- a/config/cmake/cacheinit.cmake
+++ b/config/cmake/cacheinit.cmake
@@ -14,6 +14,8 @@ SET (HDF5_BUILD_EXAMPLES ON CACHE BOOL "Build HDF5 Library Examples" FORCE)
 
 SET (HDF5_BUILD_FORTRAN ON CACHE BOOL "Build FORTRAN support" FORCE)
 
+SET (HDF5_ENABLE_F2003 OFF CACHE BOOL "Enable FORTRAN 2003 Standard" FORCE)
+
 SET (HDF5_BUILD_HL_LIB ON CACHE BOOL "Build HIGH Level HDF5 Library" FORCE)
 
 SET (HDF5_BUILD_TOOLS ON CACHE BOOL "Build HDF5 Tools" FORCE)
@@ -24,8 +26,6 @@ SET (HDF5_ENABLE_SZIP_SUPPORT ON CACHE BOOL "Use SZip Filter" FORCE)
 
 SET (HDF5_ENABLE_SZIP_ENCODING ON CACHE BOOL "Use SZip Encoding" FORCE)
 
-SET (HDF5_USE_H5DUMP_PACKED_BITS ON CACHE BOOL "Use the PACKED BITS feature in h5dump" FORCE)
-
 SET (HDF5_ENABLE_HSIZET ON CACHE BOOL "Enable datasets larger than memory" FORCE)
 
 SET (HDF5_ENABLE_DEPRECATED_SYMBOLS ON CACHE BOOL "Enable deprecated public API symbols" FORCE)
diff --git a/config/cmake/hdf5-config.cmake.build.in b/config/cmake/hdf5-config.cmake.build.in
index 47a119a..ccf5e67 100644
--- a/config/cmake/hdf5-config.cmake.build.in
+++ b/config/cmake/hdf5-config.cmake.build.in
@@ -8,13 +8,14 @@ GET_FILENAME_COMPONENT (SELF_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
 #-----------------------------------------------------------------------------
 SET (HDF5_ENABLE_PARALLEL @HDF5_ENABLE_PARALLEL@)
 SET (HDF5_BUILD_FORTRAN   @HDF5_BUILD_FORTRAN@)
+SET (HDF5_ENABLE_F2003    @HDF5_ENABLE_F2003@)
 SET (HDF5_BUILD_CPP_LIB   @HDF5_BUILD_CPP_LIB@)
 SET (HDF5_BUILD_TOOLS     @HDF5_BUILD_TOOLS@)
 SET (HDF5_BUILD_HL_LIB    @HDF5_BUILD_HL_LIB@)
 SET (HDF5_ENABLE_Z_LIB_SUPPORT @HDF5_ENABLE_Z_LIB_SUPPORT@)
 SET (HDF5_ENABLE_SZIP_SUPPORT  @HDF5_ENABLE_SZIP_SUPPORT@)
 SET (HDF5_ENABLE_SZIP_ENCODING @HDF5_ENABLE_SZIP_ENCODING@)
-SET (BUILD_SHARED_LIBS    @BUILD_SHARED_LIBS@)
+SET (HDF5_BUILD_SHARED_LIBS    @BUILD_SHARED_LIBS@)
 
 #-----------------------------------------------------------------------------
 # Directories
@@ -54,4 +55,5 @@ SET (HDF5_VERSION_MINOR  @HDF5_VERSION_MINOR@)
 #-----------------------------------------------------------------------------
 IF (NOT TARGET "hdf5")
   INCLUDE (${SELF_DIR}/hdf5-targets.cmake)
+  SET (HDF5_LIBRARIES "@HDF5_LIBRARIES_TO_EXPORT@")
 ENDIF (NOT TARGET "hdf5")
diff --git a/config/cmake/hdf5-config.cmake.install.in b/config/cmake/hdf5-config.cmake.install.in
index 8dcd86f..268d5ed 100644
--- a/config/cmake/hdf5-config.cmake.install.in
+++ b/config/cmake/hdf5-config.cmake.install.in
@@ -2,44 +2,49 @@
 # HDF5 Config file for compiling against hdf5 install directory
 #-----------------------------------------------------------------------------
 GET_FILENAME_COMPONENT (SELF_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
+GET_FILENAME_COMPONENT(_IMPORT_PREFIX "${SELF_DIR}" PATH)
+GET_FILENAME_COMPONENT(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+GET_FILENAME_COMPONENT(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
 
 #-----------------------------------------------------------------------------
 # User Options
 #-----------------------------------------------------------------------------
 SET (HDF5_ENABLE_PARALLEL @HDF5_ENABLE_PARALLEL@)
 SET (HDF5_BUILD_FORTRAN   @HDF5_BUILD_FORTRAN@)
+SET (HDF5_ENABLE_F2003    @HDF5_ENABLE_F2003@)
 SET (HDF5_BUILD_CPP_LIB   @HDF5_BUILD_CPP_LIB@)
 SET (HDF5_BUILD_TOOLS     @HDF5_BUILD_TOOLS@)
 SET (HDF5_BUILD_HL_LIB    @HDF5_BUILD_HL_LIB@)
 SET (HDF5_ENABLE_Z_LIB_SUPPORT @HDF5_ENABLE_Z_LIB_SUPPORT@)
 SET (HDF5_ENABLE_SZIP_SUPPORT  @HDF5_ENABLE_SZIP_SUPPORT@)
 SET (HDF5_ENABLE_SZIP_ENCODING @HDF5_ENABLE_SZIP_ENCODING@)
-SET (BUILD_SHARED_LIBS    @BUILD_SHARED_LIBS@)
+SET (HDF5_BUILD_SHARED_LIBS    @BUILD_SHARED_LIBS@)
+SET (HDF5_PACKAGE_EXTLIBS      @HDF5_PACKAGE_EXTLIBS@)
 
 #-----------------------------------------------------------------------------
 # Directories
 #-----------------------------------------------------------------------------
-SET (HDF5_INCLUDE_DIR "@CMAKE_INSTALL_PREFIX@/include" )
+SET (HDF5_INCLUDE_DIR "${_IMPORT_PREFIX}/include" )
 
 IF (HDF5_BUILD_FORTRAN)
-  SET (HDF5_INCLUDE_DIR_FORTRAN "@CMAKE_INSTALL_PREFIX@/include/fortran" )
+  SET (HDF5_INCLUDE_DIR_FORTRAN "${_IMPORT_PREFIX}/include/fortran" )
 ENDIF (HDF5_BUILD_FORTRAN)
   
 IF (HDF5_BUILD_CPP_LIB)
-  SET (HDF5_INCLUDE_DIR_CPP "@CMAKE_INSTALL_PREFIX@/include/cpp" )
+  SET (HDF5_INCLUDE_DIR_CPP "${_IMPORT_PREFIX}/include/cpp" )
 ENDIF (HDF5_BUILD_CPP_LIB)
 
 IF (HDF5_BUILD_HL_LIB)
-  SET (HDF5_INCLUDE_DIR_HL "@CMAKE_INSTALL_PREFIX@/include/hl" )
+  SET (HDF5_INCLUDE_DIR_HL "${_IMPORT_PREFIX}/include/hl" )
 ENDIF (HDF5_BUILD_HL_LIB)
 
 IF (HDF5_BUILD_HL_LIB AND HDF5_BUILD_CPP_LIB)
-  SET (HDF5_INCLUDE_DIR_HL_CPP "@CMAKE_INSTALL_PREFIX@/include/hl/cpp" )
+  SET (HDF5_INCLUDE_DIR_HL_CPP "${_IMPORT_PREFIX}/include/hl/cpp" )
 ENDIF (HDF5_BUILD_HL_LIB AND HDF5_BUILD_CPP_LIB)
 
 IF (HDF5_BUILD_TOOLS)
-  SET (HDF5_INCLUDE_DIR_TOOLS "@CMAKE_INSTALL_PREFIX@/include/tools" )
-  SET (HDF5_TOOLS_DIR "@CMAKE_INSTALL_PREFIX@/bin/tools" )
+  SET (HDF5_INCLUDE_DIR_TOOLS "${_IMPORT_PREFIX}/include/tools" )
+  SET (HDF5_TOOLS_DIR "${_IMPORT_PREFIX}/bin/tools" )
 ENDIF (HDF5_BUILD_TOOLS)
 
 #-----------------------------------------------------------------------------
@@ -54,7 +59,14 @@ SET (HDF5_VERSION_MINOR  @HDF5_VERSION_MINOR@)
 # project which has already built hdf5 as a subproject
 #-----------------------------------------------------------------------------
 IF (NOT TARGET "hdf5")
+  IF (HDF5_ENABLE_Z_LIB_SUPPORT AND HDF5_PACKAGE_EXTLIBS AND NOT TARGET "zlib")
+    INCLUDE (${SELF_DIR}/../ZLIB/ZLIB-targets.cmake)
+  ENDIF (HDF5_ENABLE_Z_LIB_SUPPORT AND HDF5_PACKAGE_EXTLIBS AND NOT TARGET "zlib")
+  IF (HDF5_ENABLE_SZIP_SUPPORT AND HDF5_PACKAGE_EXTLIBS AND NOT TARGET "szip")
+    INCLUDE (${SELF_DIR}/../SZIP/SZIP-targets.cmake)
+  ENDIF (HDF5_ENABLE_SZIP_SUPPORT AND HDF5_PACKAGE_EXTLIBS AND NOT TARGET "szip")
   INCLUDE (${SELF_DIR}/hdf5-targets.cmake)
+  SET (HDF5_LIBRARIES "@HDF5_LIBRARIES_TO_EXPORT@")
 ENDIF (NOT TARGET "hdf5")
 
 #-----------------------------------------------------------------------------
@@ -64,16 +76,16 @@ ENDIF (NOT TARGET "hdf5")
 # To be continued (maybe) ...
 #
 # XXX_INCLUDE_DIRS         no, use one per library as in HDF5_FORTRAN_INCLUDE_DIR
-# XXX_LIBRARIES          	 not needed - see hdf5-targets.cmake
-# XXX_DEFINITIONS        	 Definitions to use when compiling code that uses XXX. This really shouldn't include options such as (-DHAS_JPEG) that a client source-code file uses to decide whether to #include <jpeg.h>
-# XXX_EXECUTABLE         	 Where to find the XXX tool.
-# XXX_YYY_EXECUTABLE     	 Where to find the YYY tool that comes with XXX.
+# XXX_LIBRARIES             not needed - see hdf5-targets.cmake
+# XXX_DEFINITIONS           Definitions to use when compiling code that uses XXX. This really shouldn't include options such as (-DHAS_JPEG) that a client source-code file uses to decide whether to #include <jpeg.h>
+# XXX_EXECUTABLE            Where to find the XXX tool.
+# XXX_YYY_EXECUTABLE        Where to find the YYY tool that comes with XXX.
 # XXX_LIBRARY_DIRS         Optionally, the final set of library directories listed in one variable for use by client code.  This should not be a cache entry.
-# XXX_ROOT_DIR           	 Where to find the base directory of XXX.
-# XXX_VERSION_YY		       Expect Version YY if true. Make sure at most one of these is ever true.
-# XXX_WRAP_YY		           If False, do not try to use the relevent CMake wrapping command.
-# XXX_YY_FOUND           	 If False, optional YY part of XXX sytem is not available.
-# XXX_FOUND              	 Set to false, or undefined, if we haven't found, or don't want to use XXX.
+# XXX_ROOT_DIR              Where to find the base directory of XXX.
+# XXX_VERSION_YY           Expect Version YY if true. Make sure at most one of these is ever true.
+# XXX_WRAP_YY               If False, do not try to use the relevent CMake wrapping command.
+# XXX_YY_FOUND              If False, optional YY part of XXX sytem is not available.
+# XXX_FOUND                 Set to false, or undefined, if we haven't found, or don't want to use XXX.
 # XXX_RUNTIME_LIBRARY_DIRS Optionally, the runtime library search path for use when running an executable linked to shared libraries.
 #                          The list should be used by user code to create the PATH on windows or LD_LIBRARY_PATH on unix.
 #                          This should not be a cache entry.
diff --git a/config/cmake/libhdf5.settings.cmake.in b/config/cmake/libhdf5.settings.cmake.in
index ba233e8..4027c55 100644
--- a/config/cmake/libhdf5.settings.cmake.in
+++ b/config/cmake/libhdf5.settings.cmake.in
@@ -1,68 +1,69 @@
-	    SUMMARY OF THE HDF5 CONFIGURATION
-	    =================================
+      SUMMARY OF THE HDF5 CONFIGURATION
+      =================================
 
 General Information:
 -------------------
-		   HDF5 Version: @H5_VERSION@
-		  Configured on: @CONFIG_DATE@
-		  Configured by: @CONFIG_USER@
-		 Configure mode: @CONFIG_MODE@
-		    Host system: @host_cpu at -@host_vendor at -@host_os@
-	      Uname information: @UNAME_INFO@
-		       Byte sex: @BYTESEX@
-		      Libraries: @STATIC_SHARED@
-	     Installation point: @prefix@
+                   HDF5 Version: @HDF5_PACKAGE_VERSION@
+                  Configured on: @CONFIG_DATE@
+                  Configured by: @CMAKE_GENERATOR@
+                 Configure mode: CMAKE @CMAKE_VERSION@
+                    Host system: @CMAKE_HOST_SYSTEM@
+              Uname information: @CMAKE_SYSTEM_NAME@
+                       Byte sex: @BYTESEX@
+                      Libraries: @BUILD_NAME_EXT@
+             Installation point: @CMAKE_INSTALL_PREFIX@
 
 Compiling Options:
 ------------------
-               Compilation Mode: @CONFIG_MODE@
-                     C Compiler: @CC_VERSION@
-                         CFLAGS: @CFLAGS@
+               Compilation Mode: @CMAKE_BUILD_TYPE@
+                     C Compiler: @CMAKE_C_COMPILER@
+                         CFLAGS: @CMAKE_C_FLAGS@
                       H5_CFLAGS: @H5_CFLAGS@
                       AM_CFLAGS: @AM_CFLAGS@
-                       CPPFLAGS: @CPPFLAGS@
+                       CPPFLAGS: @CMAKE_CXX_FLAGS@
                     H5_CPPFLAGS: @H5_CPPFLAGS@
                     AM_CPPFLAGS: @AM_CPPFLAGS@
-               Shared Libraries: @enable_shared@
-               Static Libraries: @enable_static@
-  Statically Linked Executables: @STATIC_EXEC@
-                        LDFLAGS: @LDFLAGS@
+               Shared Libraries: @H5_ENABLE_SHARED_LIB@
+               Static Libraries: @H5_ENABLE_STATIC_LIB@
+  Statically Linked Executables: @BUILD_STATIC_EXECS@
+                        LDFLAGS: @CMAKE_SHARED_LINKER_FLAGS@
                      AM_LDFLAGS: @AM_LDFLAGS@
- 	 	Extra libraries: @LIBS@
- 		       Archiver: @AR@
- 		 	 Ranlib: @RANLIB@
- 	      Debugged Packages: @DEBUG_PKG@
-		    API Tracing: @TRACE_API@
+                Extra libraries: @LINK_LIBS@
+                       Archiver: @CMAKE_AR@
+                         Ranlib: @CMAKE_RANLIB@
+              Debugged Packages: @DEBUG_PKG@
+                    API Tracing: @HDF5_ENABLE_TRACE@
 
 Languages:
 ----------
-                        Fortran: @HDF_FORTRAN@
- at BUILD_FORTRAN_CONDITIONAL_TRUE@               Fortran Compiler: @FC@
- at BUILD_FORTRAN_CONDITIONAL_TRUE@                  Fortran Flags: @FCFLAGS@
+                        Fortran: @HDF5_BUILD_FORTRAN@
+ at BUILD_FORTRAN_CONDITIONAL_TRUE@               Fortran Compiler: @CMAKE_Fortran_COMPILER@
+ at BUILD_FORTRAN_CONDITIONAL_TRUE@          Fortran 2003 Compiler: @HDF5_ENABLE_F2003@
+ at BUILD_FORTRAN_CONDITIONAL_TRUE@                  Fortran Flags: @CMAKE_Fortran_FLAGS@
 @BUILD_FORTRAN_CONDITIONAL_TRUE@               H5 Fortran Flags: @H5_FCFLAGS@
 @BUILD_FORTRAN_CONDITIONAL_TRUE@               AM Fortran Flags: @AM_FCFLAGS@
-                            C++: @HDF_CXX@
- at BUILD_CXX_CONDITIONAL_TRUE@                   C++ Compiler: @CXX@
- at BUILD_CXX_CONDITIONAL_TRUE@                      C++ Flags: @CXXFLAGS@
+                            C++: @HDF5_BUILD_CPP_LIB@
+ at BUILD_CXX_CONDITIONAL_TRUE@                   C++ Compiler: @CMAKE_CXX_COMPILER@
+ at BUILD_CXX_CONDITIONAL_TRUE@                      C++ Flags: @CMAKE_CXX_FLAGS@
 @BUILD_CXX_CONDITIONAL_TRUE@                   H5 C++ Flags: @H5_CXXFLAGS@
 @BUILD_CXX_CONDITIONAL_TRUE@                   AM C++ Flags: @AM_CXXFLAGS@
 
 Features:
 ---------
-                  Parallel HDF5: @PARALLEL@
-             High Level library: @HDF5_HL@
-                   Threadsafety: @THREADSAFE@
+                  Parallel HDF5: @HDF5_ENABLE_PARALLEL@
+             High Level library: @HDF5_BUILD_HL_LIB@
+                   Threadsafety: @HDF5_ENABLE_THREADSAFE@
             Default API Mapping: @DEFAULT_API_VERSION@
- With Deprecated Public Symbols: @DEPRECATED_SYMBOLS@
+ With Deprecated Public Symbols: @HDF5_ENABLE_DEPRECATED_SYMBOLS@
          I/O filters (external): @EXTERNAL_FILTERS@
          I/O filters (internal): @FILTERS@
-                            MPE: @MPE@
-                     Direct VFD: @DIRECT_VFD@
-                        dmalloc: @HAVE_DMALLOC@
-Clear file buffers before write: @CLEARFILEBUF@
-           Using memory checker: @USINGMEMCHECKER@
-         Function Stack Tracing: @CODESTACK@
-                           GPFS: @GPFS@
-      Strict File Format Checks: @STRICT_FORMAT_CHECKS@
-   Optimization Instrumentation: @INSTRUMENT@
-       Large File Support (LFS): @LARGEFILE@
+                            MPE: @H5_HAVE_LIBLMPE@
+                     Direct VFD: @H5_HAVE_DIRECT@
+                        dmalloc: @H5_HAVE_LIBDMALLOC@
+Clear file buffers before write: @HDF5_Enable_Clear_File_Buffers@
+           Using memory checker: @HDF5_ENABLE_USING_MEMCHECKER@
+         Function Stack Tracing: @HDF5_ENABLE_CODESTACK@
+                           GPFS: @HDF5_ENABLE_GPFS@
+      Strict File Format Checks: @HDF5_STRICT_FORMAT_CHECKS@
+   Optimization Instrumentation: @HDF5_Enable_Instrument@
+       Large File Support (LFS): @HDF5_ENABLE_LARGE_FILE@
diff --git a/config/cmake/mccacheinit.cmake b/config/cmake/mccacheinit.cmake
index f7313ba..10b2824 100755
--- a/config/cmake/mccacheinit.cmake
+++ b/config/cmake/mccacheinit.cmake
@@ -24,8 +24,6 @@ SET (HDF5_ENABLE_SZIP_SUPPORT ON CACHE BOOL "Use SZip Filter" FORCE)
 
 SET (HDF5_ENABLE_SZIP_ENCODING ON CACHE BOOL "Use SZip Encoding" FORCE)
 
-SET (HDF5_USE_H5DUMP_PACKED_BITS ON CACHE BOOL "Use the PACKED BITS feature in h5dump" FORCE)
-
 SET (HDF5_ENABLE_HSIZET ON CACHE BOOL "Enable datasets larger than memory" FORCE)
 
 SET (HDF5_ENABLE_DEPRECATED_SYMBOLS ON CACHE BOOL "Enable deprecated public API symbols" FORCE)
@@ -56,3 +54,5 @@ SET (SZIP_TGZ_NAME "SZip.tar.gz" CACHE STRING "Use SZip from compressed file" FO
 
 SET (CMAKE_BUILD_TYPE "Debug" CACHE STRING "Build Debug" FORCE)
 
+SET (CTEST_BUILD_CONFIGURATION "Debug" CACHE STRING "Build Debug" FORCE)
+
diff --git a/config/cmake/prunTest.cmake b/config/cmake/prunTest.cmake
new file mode 100644
index 0000000..8bcf729
--- /dev/null
+++ b/config/cmake/prunTest.cmake
@@ -0,0 +1,121 @@
+# runTest.cmake executes a command and captures the output in a file. File is then compared
+# against a reference file. Exit status of command can also be compared.
+
+# arguments checking
+IF (NOT TEST_PROGRAM)
+  MESSAGE (FATAL_ERROR "Require TEST_PROGRAM to be defined")
+ENDIF (NOT TEST_PROGRAM)
+#IF (NOT TEST_ARGS)
+#  MESSAGE (STATUS "Require TEST_ARGS to be defined")
+#ENDIF (NOT TEST_ARGS)
+IF (NOT TEST_FOLDER)
+  MESSAGE ( FATAL_ERROR "Require TEST_FOLDER to be defined")
+ENDIF (NOT TEST_FOLDER)
+IF (NOT TEST_OUTPUT)
+  MESSAGE (FATAL_ERROR "Require TEST_OUTPUT to be defined")
+ENDIF (NOT TEST_OUTPUT)
+#IF (NOT TEST_EXPECT)
+#  MESSAGE (STATUS "Require TEST_EXPECT to be defined")
+#ENDIF (NOT TEST_EXPECT)
+#IF (NOT TEST_FILTER)
+#  MESSAGE (STATUS "Require TEST_FILTER to be defined")
+#ENDIF (NOT TEST_FILTER)
+IF (NOT TEST_SKIP_COMPARE AND NOT TEST_REFERENCE)
+  MESSAGE (FATAL_ERROR "Require TEST_REFERENCE to be defined")
+ENDIF (NOT TEST_SKIP_COMPARE AND NOT TEST_REFERENCE)
+
+SET (ERROR_APPEND 1)
+
+MESSAGE (STATUS "COMMAND: ${TEST_PROGRAM} ${TEST_ARGS}")
+
+IF (TEST_ENV_VAR)
+  SET (ENV{${TEST_ENV_VAR}} "${TEST_ENV_VALUE}") 
+ENDIF (TEST_ENV_VAR)
+
+# run the test program, capture the stdout/stderr and the result var
+EXECUTE_PROCESS (
+    COMMAND ${TEST_PROGRAM} ${TEST_ARGS}
+    WORKING_DIRECTORY ${TEST_FOLDER}
+    RESULT_VARIABLE TEST_RESULT
+    OUTPUT_FILE ${TEST_OUTPUT}
+    ERROR_FILE ${TEST_OUTPUT}.err
+    OUTPUT_VARIABLE TEST_ERROR
+    ERROR_VARIABLE TEST_ERROR
+)
+
+MESSAGE (STATUS "COMMAND Result: ${TEST_RESULT}")
+
+FILE (READ ${TEST_FOLDER}/${TEST_REFERENCE} TEST_STREAM)
+FILE (WRITE ${TEST_FOLDER}/P_${TEST_REFERENCE} "${TEST_STREAM}")
+
+IF (ERROR_APPEND)
+  FILE (READ ${TEST_FOLDER}/${TEST_OUTPUT}.err TEST_STREAM)
+  FILE (APPEND ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}") 
+ENDIF (ERROR_APPEND)
+
+IF (TEST_APPEND)
+  FILE (APPEND ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_APPEND} ${TEST_ERROR}\n") 
+ENDIF (TEST_APPEND)
+
+MESSAGE (STATUS "COMMAND Error: ${TEST_ERROR}")
+
+IF (TEST_MASK)
+  FILE (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM)
+  STRING(REGEX REPLACE "Storage:[^\n]+\n" "Storage:   <details removed for portability>\n" TEST_STREAM "${TEST_STREAM}") 
+  FILE (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}")
+ENDIF (TEST_MASK)
+
+IF (TEST_MASK_MOD)
+  FILE (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM)
+  STRING(REGEX REPLACE "Modified:[^\n]+\n" "Modified:  XXXX-XX-XX XX:XX:XX XXX\n" TEST_STREAM "${TEST_STREAM}") 
+  FILE (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}")
+ENDIF (TEST_MASK_MOD)
+
+IF (TEST_MASK_ERROR)
+  FILE (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM)
+  STRING(REGEX REPLACE "thread [0-9]*:" "thread (IDs):" TEST_STREAM "${TEST_STREAM}") 
+  STRING(REGEX REPLACE ": ([^\n]*)[.]c " ": (file name) " TEST_STREAM "${TEST_STREAM}") 
+  STRING(REGEX REPLACE " line [0-9]*" " line (number)" TEST_STREAM "${TEST_STREAM}") 
+  STRING(REGEX REPLACE "v[1-9]*[.][0-9]*[.]" "version (number)." TEST_STREAM "${TEST_STREAM}") 
+  STRING(REGEX REPLACE "[1-9]*[.][0-9]*[.][0-9]*[^)]*" "version (number)" TEST_STREAM "${TEST_STREAM}") 
+  STRING(REGEX REPLACE "H5Eget_auto[1-2]*" "H5Eget_auto(1 or 2)" TEST_STREAM "${TEST_STREAM}") 
+  STRING(REGEX REPLACE "H5Eset_auto[1-2]*" "H5Eset_auto(1 or 2)" TEST_STREAM "${TEST_STREAM}") 
+  FILE (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}")
+ENDIF (TEST_MASK_ERROR)
+
+IF (TEST_FILTER)
+  FILE (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM)
+  STRING(REGEX REPLACE "${TEST_FILTER}" "" TEST_STREAM "${TEST_STREAM}") 
+  FILE (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}")
+ENDIF (TEST_FILTER)
+
+#IF (TEST_REF_FILTER)
+#  MESSAGE (STATUS "TEST_REF_FILTER: ${TEST_APPEND}${TEST_REF_FILTER}")
+#  FILE (READ ${TEST_FOLDER}/P_${TEST_REFERENCE} TEST_STREAM)
+#  STRING(REGEX REPLACE "${TEST_APPEND}" "${TEST_REF_FILTER}" TEST_STREAM "${TEST_STREAM}") 
+#  FILE (WRITE ${TEST_FOLDER}/P_${TEST_REFERENCE} "${TEST_STREAM}")
+#ENDIF (TEST_REF_FILTER)
+
+IF (NOT TEST_SKIP_COMPARE)
+  IF (WIN32 AND NOT MINGW)
+    FILE (READ ${TEST_FOLDER}/P_${TEST_REFERENCE} TEST_STREAM)
+    FILE (WRITE ${TEST_FOLDER}/P_${TEST_REFERENCE} "${TEST_STREAM}")
+  ENDIF (WIN32 AND NOT MINGW)
+
+  # now compare the output with the reference
+  EXECUTE_PROCESS (
+      COMMAND ${CMAKE_COMMAND} -E compare_files ${TEST_FOLDER}/${TEST_OUTPUT} ${TEST_FOLDER}/P_${TEST_REFERENCE}
+      RESULT_VARIABLE TEST_RESULT
+  )
+
+  MESSAGE (STATUS "COMPARE Result: ${TEST_RESULT}")
+
+  # again, if return value is !=0 scream and shout
+  IF (NOT ${TEST_RESULT} STREQUAL 0)
+    MESSAGE (FATAL_ERROR "Failed: The output of ${TEST_PROGRAM} did not match P_${TEST_REFERENCE}")
+  ENDIF (NOT ${TEST_RESULT} STREQUAL 0)
+ENDIF (NOT TEST_SKIP_COMPARE)
+
+# everything went fine...
+MESSAGE ("Passed: The output of ${TEST_PROGRAM} matches P_${TEST_REFERENCE}")
+
diff --git a/config/i686-pc-cygwin b/config/i686-pc-cygwin
index a51adc3..9b1ab74 100644
--- a/config/i686-pc-cygwin
+++ b/config/i686-pc-cygwin
@@ -1,4 +1,4 @@
-#							-*- shell-script -*-
+#              -*- shell-script -*-
 #
 # Copyright by The HDF Group.
 # Copyright by the Board of Trustees of the University of Illinois.
@@ -39,9 +39,9 @@ fi
 if test "X-" = "X-$FC"; then
     case $CC_BASENAME in
         gcc*)
-            FC=g95
+            FC=gfortran
             FCLIBS=-lgcc
-            FC_BASENAME=g95
+            FC_BASENAME=gfortran
             ;;
         pgcc*)
             FC=pgf90
@@ -61,6 +61,9 @@ else
         # The PGI and Intel compilers are automatically detected below
         ifc*|ifort*|pgf90*)
             ;;
+        gfortran)
+            FCLIBS=-lgcc
+            ;;
         g95)
             FCLIBS=-lgcc
             ;;
diff --git a/config/ia64-linux-gnu b/config/ia64-linux-gnu
index 519d0fc..9f1b262 100644
--- a/config/ia64-linux-gnu
+++ b/config/ia64-linux-gnu
@@ -142,12 +142,3 @@ case $CXX_BASENAME in
 	PROFILE_CPPFLAGS=
 	;;
 esac
-
-# Check MPICH settings
-. $srcdir/config/mpich
-#Uncomment the next line if your system doesn't support MPI complex derived datatype.
-#hdf5_cv_mpi_complex_derived_datatype_works=${hdf5_cv_mpi_complex_derived_datatype_works='no'}
-#Comment out the following line if your system supports collective IO when some processes
-#don't have any contributions to IOs.
-hdf5_cv_mpi_special_collective_io_works=${hdf5_cv_mpi_special_collective_io_works='no'}
-
diff --git a/config/ibm-aix b/config/ibm-aix
index a94be4b..ff541bc 100644
--- a/config/ibm-aix
+++ b/config/ibm-aix
@@ -36,10 +36,7 @@ fi
 # Ask for more memory so that "make check" will pass. Not necessary for -q64
 # mode but it does no harm.
 if test "X-$enable_parallel" = "X-yes" -o X-$CC_BASENAME = X-mpcc_r; then
-    RUNPARALLEL=${RUNPARALLEL="env LDR_CNTRL=MAXDATA=0x20000000 at DSA MP_PROCS=\$\${NPROCS:=6} MP_TASKS_PER_NODE=\$\${NPROCS:=6} poe"}
-    RUNSERIAL=${RUNSERIAL="env LDR_CNTRL=MAXDATA=0x20000000 at DSA MP_PROCS=1 MP_TASKS_PER_NODE=1 poe"}
-else
-    RUNSERIAL=${RUNSERIAL="env LDR_CNTRL=MAXDATA=0x20000000 at DSA"}
+    RUNPARALLEL=${RUNPARALLEL="env MP_PROCS=\$\${NPROCS:=6} MP_TASKS_PER_NODE=\$\${NPROCS:=6} poe"}
 fi
 
 
@@ -142,11 +139,6 @@ if test "X-" = "X-$f9x_flags_set"; then
   f9x_flags_set=yes
 fi
 
-# With poe version 3.2.0.19 or lower(using lpp -l all | grep ppe.poe to check the version number, 
-# IBM MPI-IO implementation has a bug, 
-#it cannot generate correct MPI derived datatype. Please uncomment the following line:
-#hdf5_cv_mpi_complex_derived_datatype_works=${hdf5_cv_mpi_complex_derived_datatype_works='no'}
-
 # The default C++ compiler
 
 # Use AIX supplied C++ compiler by default.
diff --git a/config/irix6.x b/config/irix6.x
index 9bd9c4c..8179b86 100644
--- a/config/irix6.x
+++ b/config/irix6.x
@@ -171,26 +171,6 @@ hdf5_cv_ulong_to_fp_bottom_bit_accurate=${hdf5_cv_ulong_to_fp_bottom_bit_accurat
 hdf5_cv_ldouble_to_integer_accurate=${hdf5_cv_ldouble_to_integer_accurate='no'}
 hdf5_cv_integer_to_ldouble_accurate=${hdf5_cv_integer_to_ldouble_accurate='no'}
 
-# For IRIX 6.5, any version that is older than MIPSpro 7.3.1.3m, 
-# the MPI derived datatype is not working.
-# Versions 7.4.2m or newer work.
-# Up to version 7.4.4m, it cannot handle collective IO with non-contribution 
-# of some processes.
-# Fix $hdf5_cv_mpi_complex_derived_datatype_works if it is not set and is using cc.
-if [ -z "$hdf5_cv_mpi_complex_derived_datatype_works" -a $CC_BASENAME = cc ]; then
-    ccversion=`$CC -version 2>&1 | sed -e 's/.*Version //p'`
-    ccversion1=`echo $ccversion | cut -f1 -d.`
-    ccversion2=`echo $ccversion | cut -f2 -d.`
-    # Assume all versions 7.4.* or newer are okay
-    # and assume ccversion2 is never larger than 99.
-    ccversionval=`expr $ccversion1 \* 100 + $ccversion2`
-    hdf5_cv_mpi_special_collective_io_works='no'
-    if [ $ccversionval -lt 704 ]; then
-        hdf5_cv_mpi_complex_derived_datatype_works='no'
-#        hdf5_cv_mpi_special_collective_io_works='no'
-    fi
-fi
-
 # Set flag to generate alternate code for H5V_log2_gen, to avoid
 # problems with the MIPSpro compiler 7.30 and IRIX64 6.5 (ie. other
 # combinations might work, but haven't been tested)
diff --git a/config/linux-gnulibc1 b/config/linux-gnulibc1
index 8f04cf0..9dcc411 100644
--- a/config/linux-gnulibc1
+++ b/config/linux-gnulibc1
@@ -125,23 +125,6 @@ if test -z "$CXX"; then
   CXX_BASENAME=g++
 fi
 
-# Check MPICH settings
-. $srcdir/config/mpich
-
-# The ChaMPIon on NCSA tungsten doesn't work correctly for either of the following
-# cases:
-#     1. collective I/O when some processes don't have any contributions;
-#     2. complex derived MPI data type.
-if test $CC_BASENAME = cmpicc; then
-  hdf5_cv_mpi_special_collective_io_works=${hdf5_cv_mpi_special_collective_io_works='no'}
-  hdf5_cv_mpi_complex_derived_datatype_works=${hdf5_cv_mpi_complex_derived_datatype_works='no'}
-fi
-
-#Comment out the following line if your system supports collective IO when some processes
-#don't have any contributions to IOs.
-hdf5_cv_mpi_special_collective_io_works=${hdf5_cv_mpi_special_collective_io_works='no'}
-hdf5_cv_mpi_complex_derived_datatype_works=${hdf5_cv_mpi_complex_derived_datatype_works='no'}
-
 # compiler version strings
 case $CC in
     # whatever matches *pgcc* will also match *gcc*, so this one must come first
diff --git a/config/lt_vers.am b/config/lt_vers.am
index 9d3ea67..faa527e 100644
--- a/config/lt_vers.am
+++ b/config/lt_vers.am
@@ -17,7 +17,7 @@
 # Add libtool shared library version numbers to the HDF5 library
 # See libtool versioning documentation online.
 LT_VERS_INTERFACE = 7
-LT_VERS_REVISION = 1
+LT_VERS_REVISION = 2
 LT_VERS_AGE = 0
 
 ## If the API changes *at all*, increment LT_VERS_INTERFACE and
diff --git a/config/mpich b/config/mpich
deleted file mode 100644
index 575859e..0000000
--- a/config/mpich
+++ /dev/null
@@ -1,83 +0,0 @@
-#							-*- shell-script -*-
-#
-# 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 at hdfgroup.org.
-
-# This file should be sourced into configure if the compiler is the
-# MPICH compiler script. It is careful not to do anything if the compiler
-# is not MPICH.
-
-# Check if mpicc can support complicated derived datatype correctly.
-# We know that mpich 1.2.4 and 1.2.5 do not support it correctly.  We assume
-# older versions do not work either.  We don't know of a way of testing its
-# correctness without the risk of hanging the configure process.  So, we
-# set the configure variable hdf5_cv_mpi_complex_derived_datatype_works to no.
-# Notice that this code works only if the mpicc compiler shows its $MPIVERSION
-# properly.  It is confirmed mpicc does that as far back as v1.2.3.
-
-# mpich2 do not support it correctly.  But mpich2 reports small version number
-# indistiguishable from mpich.  Some mpich2 reports blank, some reports 1.0.2.
-
-if [ -z "$hdf5_cv_mpi_complex_derived_datatype_works" ]; then
-    ccversion=`$CC -v 2>/dev/null`
-    # mpich compiler will give "mpicc for 1.2.x ..."
-    if echo "$ccversion" | grep '^mpicc for' > /dev/null ; then
-	# $CC is an MPICH compiler. Grab the version numbers.
-        ccversion=`echo $ccversion | cut -f3 -d' '`
-	case "$ccversion" in
-	    1.2.[0-5]*)
-		hdf5_cv_mpi_complex_derived_datatype_works='no'
-		;;
-	    1.0.2)
-		# mpich2 is recycling the version number, some report
-		# 1.0.2, some report blank.
-		hdf5_cv_mpi_complex_derived_datatype_works='no'
-		;;
-	    "")
-		# got blank ccversion.  Assume it is bad a mpich2.
-		hdf5_cv_mpi_complex_derived_datatype_works='no'
-		;;
-	    *)
-		# assume okay
-		;;
-	esac
-    fi
-fi
-
-if [ -z "$hdf5_cv_mpi_special_collective_io_works" ]; then
-    ccversion=`$CC -v 2>/dev/null`
-    # mpich compiler will give "mpicc for 1.2.x ..."
-    if echo "$ccversion" | grep '^mpicc for' > /dev/null ; then
-	# $CC is an MPICH compiler. Grab the version numbers.
-        ccversion=`echo $ccversion | cut -f3 -d' '`
-	case "$ccversion" in
-	    1.2.[0-6]*)
-		hdf5_cv_mpi_special_collective_io_works='no'
-		;;
-	    1.0.2)
-		# mpich2 is recycling the version number, some report
-		# 1.0.2, some report blank.
-		hdf5_cv_mpi_special_collective_io_works='no'
-		;;
-	    "")
-		# got blank ccversion.  Assume it is bad a mpich2.
-		hdf5_cv_mpi_special_collective_io_works='no'
-		;;
-	    *)
-		# assume okay
-		;;
-	esac
-    fi
-fi
-
-
diff --git a/config/x86_64-redstorm-linux-gnu b/config/x86_64-redstorm-linux-gnu
index 0cd2d73..76f9711 100644
--- a/config/x86_64-redstorm-linux-gnu
+++ b/config/x86_64-redstorm-linux-gnu
@@ -162,5 +162,3 @@ hdf5_cv_ullong_to_fp_cast_works=${hdf5_cv_ullong_to_fp_cast_works='yes'}
 hdf5_cv_ullong_to_ldouble_precision_works=${hdf5_cv_ullong_to_ldouble_precision_works='yes'}
 hdf5_cv_vsnprintf_works=${hdf5_cv_vsnprintf_works='yes'}
 hdf5_cv_fp_to_integer_overflow_works=${hdf5_cv_fp_to_integer_overflow_works='yes'}
-# mpich2 used has derived datatype errors.
-hdf5_cv_mpi_complex_derived_datatype_works=${hdf5_cv_mpi_complex_derived_datatype_works='no'}
diff --git a/configure b/configure
index ec1a6ba..133efd8 100755
--- a/configure
+++ b/configure
@@ -1,7 +1,7 @@
 #! /bin/sh
-# From configure.in Id: configure.in 20696 2011-05-02 15:36:18Z nfortne2 .
+# From configure.in Id: configure.in 21755 2011-11-14 17:47:13Z mamcgree .
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68 for HDF5 1.8.7.
+# Generated by GNU Autoconf 2.68 for HDF5 1.8.8.
 #
 # Report bugs to <help at hdfgroup.org>.
 #
@@ -571,8 +571,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='HDF5'
 PACKAGE_TARNAME='hdf5'
-PACKAGE_VERSION='1.8.7'
-PACKAGE_STRING='HDF5 1.8.7'
+PACKAGE_VERSION='1.8.8'
+PACKAGE_STRING='HDF5 1.8.8'
 PACKAGE_BUGREPORT='help at hdfgroup.org'
 PACKAGE_URL=''
 
@@ -713,6 +713,8 @@ ac_ct_CXX
 CXXFLAGS
 FORTRAN_DEFAULT_REALisDBLE_F_FALSE
 FORTRAN_DEFAULT_REALisDBLE_F_TRUE
+FORTRAN_2003_CONDITIONAL_F_FALSE
+FORTRAN_2003_CONDITIONAL_F_TRUE
 FORTRAN_HAVE_SIZEOF_FALSE
 FORTRAN_HAVE_SIZEOF_TRUE
 FCLIBS
@@ -731,6 +733,7 @@ HSIZE_T
 HADDR_T
 R_INTEGER
 R_LARGE
+HAVE_FORTRAN_2003
 HDF5_INTERFACES
 am__fastdepCC_FALSE
 am__fastdepCC_TRUE
@@ -747,7 +750,6 @@ ac_ct_CC
 LDFLAGS
 CFLAGS
 CC
-PACKED_BITS
 UNAME_INFO
 enable_static
 enable_shared
@@ -762,7 +764,9 @@ GPFS
 HDF5_HL
 CXX
 HDF_CXX
+FC2003
 FC
+HDF_FORTRAN2003
 HDF_FORTRAN
 STATIC_EXEC
 MPE
@@ -860,6 +864,7 @@ enable_maintainer_mode
 enable_dependency_tracking
 enable_unsupported
 enable_fortran
+enable_fortran2003
 enable_cxx
 enable_shared
 enable_static
@@ -901,7 +906,6 @@ enable_deprecated_symbols
 with_default_api_version
 enable_strict_format_checks
 enable_embedded_libinfo
-enable_h5dump_packed_bits
 '
       ac_precious_vars='build_alias
 host_alias
@@ -1460,7 +1464,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures HDF5 1.8.7 to adapt to many kinds of systems.
+\`configure' configures HDF5 1.8.8 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1530,7 +1534,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of HDF5 1.8.7:";;
+     short | recursive ) echo "Configuration of HDF5 1.8.8:";;
    esac
   cat <<\_ACEOF
 
@@ -1545,7 +1549,9 @@ Optional Features:
   --disable-dependency-tracking  speeds up one-time build
   --enable-dependency-tracking   do not reject slow dependency extractors
   --enable-unsupported    Allow unsupported combinations of configure options
-  --enable-fortran        Compile the Fortran interface [default=no]
+  --enable-fortran        Compile the Fortran 77/90/95 interface [default=no]
+  --enable-fortran2003    Compile the Fortran 2003 interface, must also
+                          specify --enable-fortran [default=no]
   --enable-cxx            Compile the C++ interface [default=no]
   --enable-shared[=PKGS]  build shared libraries [default=yes]
   --enable-static[=PKGS]  build static libraries [default=yes]
@@ -1612,8 +1618,6 @@ Optional Features:
                           debug flag is enabled, no otherwise
   --enable-embedded-libinfo
                           Enable embedded library information [default=yes]
-  --enable-h5dump-packed-bits
-                          Enable h5dump packed bits feature [default=yes]
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
@@ -1726,7 +1730,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-HDF5 configure 1.8.7
+HDF5 configure 1.8.8
 generated by GNU Autoconf 2.68
 
 Copyright (C) 2010 Free Software Foundation, Inc.
@@ -2685,21 +2689,23 @@ rm -f conftest.val
 
 } # ac_fn_c_compute_int
 
-# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES
-# ----------------------------------------------------
-# Tries to find if the field MEMBER exists in type AGGR, after including
-# INCLUDES, setting cache variable VAR accordingly.
-ac_fn_c_check_member ()
+# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
+# ---------------------------------------------
+# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
+# accordingly.
+ac_fn_c_check_decl ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
-$as_echo_n "checking for $2.$3... " >&6; }
-if eval \${$4+:} false; then :
+  as_decl_name=`echo $2|sed 's/ *(.*//'`
+  as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
+$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-$5
+$4
 #ifdef FC_DUMMY_MAIN
 #ifndef FC_DUMMY_MAIN_EQ_F77
 #  ifdef __cplusplus
@@ -2711,15 +2717,43 @@ $5
 int
 main ()
 {
-static $2 ac_aggr;
-if (ac_aggr.$3)
-return 0;
+#ifndef $as_decl_name
+#ifdef __cplusplus
+  (void) $as_decl_use;
+#else
+  (void) $as_decl_name;
+#endif
+#endif
+
   ;
   return 0;
 }
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$4=yes"
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_decl
+
+# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES
+# ----------------------------------------------------
+# Tries to find if the field MEMBER exists in type AGGR, after including
+# INCLUDES, setting cache variable VAR accordingly.
+ac_fn_c_check_member ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
+$as_echo_n "checking for $2.$3... " >&6; }
+if eval \${$4+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -2736,7 +2770,7 @@ int
 main ()
 {
 static $2 ac_aggr;
-if (sizeof ac_aggr.$3)
+if (ac_aggr.$3)
 return 0;
   ;
   return 0;
@@ -2745,36 +2779,9 @@ _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
   eval "$4=yes"
 else
-  eval "$4=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$4
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_member
-
-# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
-# ---------------------------------------------
-# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
-# accordingly.
-ac_fn_c_check_decl ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  as_decl_name=`echo $2|sed 's/ *(.*//'`
-  as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
-$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-$4
+$5
 #ifdef FC_DUMMY_MAIN
 #ifndef FC_DUMMY_MAIN_EQ_F77
 #  ifdef __cplusplus
@@ -2786,36 +2793,33 @@ $4
 int
 main ()
 {
-#ifndef $as_decl_name
-#ifdef __cplusplus
-  (void) $as_decl_use;
-#else
-  (void) $as_decl_name;
-#endif
-#endif
-
+static $2 ac_aggr;
+if (sizeof ac_aggr.$3)
+return 0;
   ;
   return 0;
 }
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$3=yes"
+  eval "$4=yes"
 else
-  eval "$3=no"
+  eval "$4=no"
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-eval ac_res=\$$3
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$4
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
-} # ac_fn_c_check_decl
+} # ac_fn_c_check_member
 cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by HDF5 $as_me 1.8.7, which was
+It was created by HDF5 $as_me 1.8.8, which was
 generated by GNU Autoconf 2.68.  Invocation command line was
 
   $ $0 $@
@@ -3635,7 +3639,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='hdf5'
- VERSION='1.8.7'
+ VERSION='1.8.8'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -3842,7 +3846,9 @@ $as_echo "done" >&6; }
  MPE=no
  STATIC_EXEC=no
  HDF_FORTRAN=no
+ HDF_FORTRAN2003=no
  HDF_FORTRAN=no
+ HDF_FORTRAN2003=no
  HDF_CXX=no
  HDF_CXX=no
  HDF5_HL=yes
@@ -3857,7 +3863,6 @@ $as_echo "done" >&6; }
 
 
  UNAME_INFO=`uname -a`
- PACKED_BITS=yes
 
 
 
@@ -4992,15 +4997,42 @@ if test "${enable_fortran+set}" = set; then :
 fi
 
 
+if test "X$HDF_FORTRAN" = "Xyes"; then
+  echo "yes"
+else
+  echo "no"
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if Fortran 2003 interface enabled" >&5
+$as_echo_n "checking if Fortran 2003 interface enabled... " >&6; }
+# Check whether --enable-fortran2003 was given.
+if test "${enable_fortran2003+set}" = set; then :
+  enableval=$enable_fortran2003; HDF_FORTRAN2003=$enableval
+fi
+
+
+
+if test "X$HDF_FORTRAN2003" = "Xyes" && test "X$HDF_FORTRAN" = "Xno"; then
+  echo "no"
+  as_fn_error $? "--enable-fortran must be used with --enable-fortran2003" "$LINENO" 5
+else
+  echo "yes"
+fi
 
 HAVE_SIZEOF="no"
 FORTRAN_DEFAULT_REALisDBLE="no"
 
 if test "X$HDF_FORTRAN" = "Xyes"; then
-  echo "yes"
+
+   HDF_FORTRAN=yes
+
 
   HDF5_INTERFACES="$HDF5_INTERFACES fortran"
 
+        HAVE_FORTRAN_2003="no"
+  HAVE_F2003_REQUIREMENTS="no"
+
 
 
 
@@ -6256,8 +6288,6 @@ fi
 
 
 
-
-
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Fortran default REAL is DOUBLE PRECISION" >&5
 $as_echo_n "checking if Fortran default REAL is DOUBLE PRECISION... " >&6; }
 
@@ -6303,16 +6333,56 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
   conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
-    ac_ext=c
+
+  if test "X$HDF_FORTRAN2003" = "Xyes"; then
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Fortran compiler version compatible with Fortran 2003 HDF" >&5
+$as_echo_n "checking if Fortran compiler version compatible with Fortran 2003 HDF... " >&6; }
+    HAVE_FORTRAN_2003="no"
+
+    cat > conftest.$ac_ext <<_ACEOF
+      program main
+
+
+	USE iso_c_binding
+	IMPLICIT NONE
+	TYPE(C_PTR) :: ptr
+	TYPE(C_FUNPTR) :: funptr
+	CHARACTER(LEN=80, KIND=c_char), TARGET :: ichr
+
+	ptr = C_LOC(ichr(1:1))
+
+
+      end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+        HAVE_F2003_REQUIREMENTS=yes
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+    if test "X$HAVE_F2003_REQUIREMENTS" = "Xno"; then
+          as_fn_error $? "Fortran compiler lacks required Fortran 2003 features; unsupported Fortran 2003 compiler, remove --enable-fortran2003" "$LINENO" 5
+    else
+      HAVE_FORTRAN_2003="yes"
+        fi
+
+  fi
+else
+  FC="no"
+fi
+
+ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-else
-  echo "no"
-  FC="no"
-fi
 
  if test "X$HAVE_SIZEOF" = "Xyes"; then
   FORTRAN_HAVE_SIZEOF_TRUE=
@@ -6322,6 +6392,14 @@ else
   FORTRAN_HAVE_SIZEOF_FALSE=
 fi
 
+ if test "X$HAVE_FORTRAN_2003" = "Xyes"; then
+  FORTRAN_2003_CONDITIONAL_F_TRUE=
+  FORTRAN_2003_CONDITIONAL_F_FALSE='#'
+else
+  FORTRAN_2003_CONDITIONAL_F_TRUE='#'
+  FORTRAN_2003_CONDITIONAL_F_FALSE=
+fi
+
  if test "X$FORTRAN_DEFAULT_REALisDBLE" = "Xyes"; then
   FORTRAN_DEFAULT_REALisDBLE_F_TRUE=
   FORTRAN_DEFAULT_REALisDBLE_F_FALSE='#'
@@ -7374,7 +7452,7 @@ $as_echo "none" >&6; }
             ;;
 esac
 
-if test "X$HDF_FORTRAN" = "Xyes"; then
+if test "X$HDF_FORTRAN" = "Xyes" ; then
     ac_ext=${ac_fc_srcext-f}
 ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
 ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
@@ -21693,7 +21771,7 @@ $as_echo "profile" >&6; }
     enable_production="user-defined"
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: user-defined" >&5
 $as_echo "user-defined" >&6; }
-    CONFIG_MODE="$X-enableval"
+    CONFIG_MODE="$enableval"
     ;;
 esac
 
@@ -22049,6 +22127,83 @@ else
 fi
 done
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5
+$as_echo_n "checking for library containing clock_gettime... " >&6; }
+if ${ac_cv_search_clock_gettime+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char clock_gettime ();
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+return clock_gettime ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' rt posix4; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_clock_gettime=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_clock_gettime+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_clock_gettime+:} false; then :
+
+else
+  ac_cv_search_clock_gettime=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5
+$as_echo "$ac_cv_search_clock_gettime" >&6; }
+ac_res=$ac_cv_search_clock_gettime
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+for ac_func in clock_gettime
+do :
+  ac_fn_c_check_func "$LINENO" "clock_gettime" "ac_cv_func_clock_gettime"
+if test "x$ac_cv_func_clock_gettime" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_CLOCK_GETTIME 1
+_ACEOF
+ have_clock_gettime="yes"
+else
+  have_clock_gettime="no"
+fi
+done
+
 
 for ac_header in sys/resource.h sys/time.h unistd.h sys/ioctl.h sys/stat.h
 do :
@@ -22102,6 +22257,19 @@ fi
 done
 
 
+for ac_header in mach/mach_time.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "mach/mach_time.h" "ac_cv_header_mach_mach_time_h" "$ac_includes_default"
+if test "x$ac_cv_header_mach_mach_time_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_MACH_MACH_TIME_H 1
+_ACEOF
+
+fi
+
+done
+
+
 case "`uname`" in
   CYGWIN*)
     for ac_header in io.h sys/timeb.h
@@ -22523,13 +22691,14 @@ case "$host_cpu-$host_vendor-$host_os" in
         AM_CPPFLAGS="-D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE $AM_CPPFLAGS"
     fi
 
-                                                            H5_CPPFLAGS="-D_POSIX_SOURCE $H5_CPPFLAGS"
+                                                                H5_CPPFLAGS="-D_POSIX_C_SOURCE=199506L $H5_CPPFLAGS"
 
-                    AM_CPPFLAGS="-D_BSD_SOURCE $AM_CPPFLAGS"
+                                    AM_CPPFLAGS="-D_BSD_SOURCE $AM_CPPFLAGS"
     ;;
 esac
 
-CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS"
+CPPFLAGS="$H5_CPPFLAGS $AM_CPPFLAGS $CPPFLAGS"
+CFLAGS="$H5_CFLAGS $AM_CFLAGS $CFLAGS"
 
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -25604,6 +25773,15 @@ $as_echo "#define HAVE_THREADSAFE 1" >>confdefs.h
 
 fi
 
+ac_fn_c_check_decl "$LINENO" "CLOCK_MONOTONIC" "ac_cv_have_decl_CLOCK_MONOTONIC" "#include <time.h>
+"
+if test "x$ac_cv_have_decl_CLOCK_MONOTONIC" = xyes; then :
+  have_clock_monotonic="yes"
+else
+  have_clock_monotonic="no"
+fi
+
+
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tm_gmtoff in struct tm" >&5
 $as_echo_n "checking for tm_gmtoff in struct tm... " >&6; }
@@ -28042,74 +28220,31 @@ $as_echo "yes" >&6; }
 $as_echo "no" >&6; }
   fi
 
-# Check whether --enable-mpi-size was given.
+                # Check whether --enable-mpi-size was given.
 if test "${enable_mpi_size+set}" = set; then :
   enableval=$enable_mpi_size; MPI_GET_SIZE=$enableval
 fi
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI_File_get_size is enabled" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI_File_get_size is enabled" >&5
 $as_echo_n "checking if MPI_File_get_size is enabled... " >&6; }
 
 
-case "X-$MPI_GET_SIZE" in
-  X-no)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+  case "X-$MPI_GET_SIZE" in
+    X-no)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-    MPI_GET_SIZE=no
-    ;;
-  X-yes|*)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+      MPI_GET_SIZE=no
+      ;;
+    X-yes|*)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
-    MPI_GET_SIZE=yes
+      MPI_GET_SIZE=yes
 
 $as_echo "#define HAVE_MPI_GET_SIZE 1" >>confdefs.h
 
-    ;;
-esac
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if irregular hyperslab optimization code works inside MPI-IO" >&5
-$as_echo_n "checking if irregular hyperslab optimization code works inside MPI-IO... " >&6; }
-
-if ${hdf5_cv_mpi_complex_derived_datatype_works+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  hdf5_cv_mpi_complex_derived_datatype_works=yes
-fi
-
-
-if test ${hdf5_cv_mpi_complex_derived_datatype_works} = "yes"; then
-
-$as_echo "#define MPI_COMPLEX_DERIVED_DATATYPE_WORKS 1" >>confdefs.h
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI-IO can do collective IO when one or more processes don't do IOs" >&5
-$as_echo_n "checking if MPI-IO can do collective IO when one or more processes don't do IOs... " >&6; }
-
-if ${hdf5_cv_mpi_special_collective_io_works+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  hdf5_cv_mpi_special_collective_io_works=yes
-fi
-
-
-if test ${hdf5_cv_mpi_special_collective_io_works} = "yes"; then
-
-$as_echo "#define MPI_SPECIAL_COLLECTIVE_IO_WORKS 1" >>confdefs.h
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
+      ;;
+  esac
 fi
 
 
@@ -29759,29 +29894,6 @@ $as_echo "no" >&6; }
     fi
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Whether to enable the h5dump packed bits feature" >&5
-$as_echo_n "checking Whether to enable the h5dump packed bits feature... " >&6; }
-# Check whether --enable-h5dump-packed-bits was given.
-if test "${enable_h5dump_packed_bits+set}" = set; then :
-  enableval=$enable_h5dump_packed_bits; enable_h5dump_packed_bits=$enableval
-else
-  enable_h5dump_packed_bits=yes
-fi
-
-
-   if test "${enable_h5dump_packed_bits}" = "yes"; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-$as_echo "#define HAVE_H5DUMP_PACKED_BITS 1" >>confdefs.h
-
-   else
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-      PACKED_BITS=no
-    fi
-
-
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if alignment restrictions are strictly enforced" >&5
 $as_echo_n "checking if alignment restrictions are strictly enforced... " >&6; }
 if test "$cross_compiling" = yes; then :
@@ -30075,6 +30187,10 @@ if test -z "${FORTRAN_HAVE_SIZEOF_TRUE}" && test -z "${FORTRAN_HAVE_SIZEOF_FALSE
   as_fn_error $? "conditional \"FORTRAN_HAVE_SIZEOF\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${FORTRAN_2003_CONDITIONAL_F_TRUE}" && test -z "${FORTRAN_2003_CONDITIONAL_F_FALSE}"; then
+  as_fn_error $? "conditional \"FORTRAN_2003_CONDITIONAL_F\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${FORTRAN_DEFAULT_REALisDBLE_F_TRUE}" && test -z "${FORTRAN_DEFAULT_REALisDBLE_F_FALSE}"; then
   as_fn_error $? "conditional \"FORTRAN_DEFAULT_REALisDBLE_F\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -30529,7 +30645,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by HDF5 $as_me 1.8.7, which was
+This file was extended by HDF5 $as_me 1.8.8, which was
 generated by GNU Autoconf 2.68.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -30595,7 +30711,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-HDF5 config.status 1.8.7
+HDF5 config.status 1.8.8
 configured by $0, generated by GNU Autoconf 2.68,
   with options \\"\$ac_cs_config\\"
 
@@ -33389,7 +33505,7 @@ Usage: $0 [OPTIONS]
 Report bugs to <bug-libtool at gnu.org>."
 
 lt_cl_version="\
-HDF5 config.lt 1.8.7
+HDF5 config.lt 1.8.8
 configured by $0, generated by GNU Autoconf 2.68.
 
 Copyright (C) 2010 Free Software Foundation, Inc.
diff --git a/configure.in b/configure.in
index 7973b56..a11eb49 100644
--- a/configure.in
+++ b/configure.in
@@ -16,7 +16,7 @@ dnl access to either file, you may request a copy from help at hdfgroup.org.
 dnl ----------------------------------------------------------------------
 dnl Initialize configure.
 dnl
-AC_REVISION($Id: configure.in 20696 2011-05-02 15:36:18Z nfortne2 $)
+AC_REVISION($Id: configure.in 21758 2011-11-15 15:47:24Z mamcgree $)
 AC_PREREQ([2.53])
 
 dnl AC_INIT takes the name of the package, the version number, and an
@@ -26,7 +26,7 @@ dnl
 dnl NOTE: Don't forget to change the version number here when we do a
 dnl release!!!
 dnl
-AC_INIT([HDF5], [1.8.7], [help at hdfgroup.org])
+AC_INIT([HDF5], [1.8.8], [help at hdfgroup.org])
 AC_CONFIG_SRCDIR([src/H5.c])
 AM_CONFIG_HEADER([src/H5config.h])
 
@@ -154,6 +154,7 @@ dnl EXTERNAL_FILTERS equals all external filters. Default none.
 dnl MPE: whether MPE option is enabled. Default no.
 dnl STATIC_EXEC: whether static-exec is enabled. Default no.
 dnl HDF_FORTRAN: whether Fortran is enabled. Default no.
+dnl HDF_FORTRAN2003: whether Fortran 2003 is enabled. Default no.
 dnl FC: Fortran compiler.
 dnl HDF_CXX: whether C++ is enabled. Default no.
 dnl CXX: C++ compiler.
@@ -169,13 +170,14 @@ dnl STATIC_SHARED: whether static and/or shared libraries are requested.
 dnl enable_shared: whether shared lib is enabled.
 dnl enable_static: whether static lib is enabled.
 dnl UNAME_INFO: System information.
-dnl PACKED_BITS: H5dump packed bits feature is enabled.
 
 AC_SUBST(EXTERNAL_FILTERS)
 AC_SUBST(MPE) MPE=no
 AC_SUBST(STATIC_EXEC) STATIC_EXEC=no
 AC_SUBST(HDF_FORTRAN) HDF_FORTRAN=no
+AC_SUBST(HDF_FORTRAN2003) HDF_FORTRAN2003=no
 AC_SUBST(FC) HDF_FORTRAN=no
+AC_SUBST(FC2003) HDF_FORTRAN2003=no
 AC_SUBST(HDF_CXX) HDF_CXX=no
 AC_SUBST(CXX) HDF_CXX=no
 AC_SUBST(HDF5_HL) HDF5_HL=yes
@@ -190,7 +192,6 @@ AC_SUBST(STATIC_SHARED)
 AC_SUBST(enable_shared)
 AC_SUBST(enable_static)
 AC_SUBST(UNAME_INFO) UNAME_INFO=`uname -a`
-AC_SUBST(PACKED_BITS) PACKED_BITS=yes
 
 dnl ----------------------------------------------------------------------
 dnl Some platforms have broken basename, and/or xargs programs. Check
@@ -371,19 +372,53 @@ AC_SUBST([HDF5_INTERFACES]) HDF5_INTERFACES=""
 AC_MSG_CHECKING([if Fortran interface enabled])
 AC_ARG_ENABLE([fortran],
               [AC_HELP_STRING([--enable-fortran],
-                              [Compile the Fortran interface [default=no]])],
+                              [Compile the Fortran 77/90/95 interface [default=no]])],
               [HDF_FORTRAN=$enableval])
 
+if test "X$HDF_FORTRAN" = "Xyes"; then
+  echo "yes"
+else
+  echo "no"
+fi
+
+
+dnl ----------------------------------------------------------------------
+dnl Check if they would like the Fortran 2003 interface compiled
+dnl
+AC_MSG_CHECKING([if Fortran 2003 interface enabled])
+AC_ARG_ENABLE([fortran2003],
+              [AC_HELP_STRING([--enable-fortran2003],
+                              [Compile the Fortran 2003 interface, must also specify --enable-fortran [default=no]])],
+              [HDF_FORTRAN2003=$enableval])
+
+dnl ----------------------------------------------------------------------
+dnl Check to make sure --enable-fortran is present if --enable-fortran2003 
+dnl was specified
+
+if test "X$HDF_FORTRAN2003" = "Xyes" && test "X$HDF_FORTRAN" = "Xno"; then
+  echo "no"
+  AC_MSG_ERROR([--enable-fortran must be used with --enable-fortran2003])
+else
+  echo "yes"
+fi
 
 HAVE_SIZEOF="no"
-FORTRAN_DEFAULT_REALisDBLE="no"	
+FORTRAN_DEFAULT_REALisDBLE="no"
 
 if test "X$HDF_FORTRAN" = "Xyes"; then
-  echo "yes"
 
+  AC_SUBST(FC) HDF_FORTRAN=yes
+  AC_SUBST([HAVE_FORTRAN_2003])
+		
   HDF5_INTERFACES="$HDF5_INTERFACES fortran"
 
   dnl --------------------------------------------------------------------
+  dnl Default for FORTRAN 2003 compliant compilers
+  dnl
+  HAVE_FORTRAN_2003="no"
+  HAVE_F2003_REQUIREMENTS="no"
+
+  dnl --------------------------------------------------------------------
   dnl HDF5 integer variables for the H5fortran_types.f90 file.
   dnl
   AC_SUBST([R_LARGE])
@@ -431,19 +466,19 @@ if test "X$HDF_FORTRAN" = "Xyes"; then
   dnl --------------------------------------------------------------------
   dnl See if the compiler will support the "-I." option
   dnl
-dnl  AM_FCFLAGS_saved=$AM_FCFLAGS
-dnl  AM_FCFLAGS="${AM_FCFLAGS} -I."
+  dnl  AM_FCFLAGS_saved=$AM_FCFLAGS
+  dnl  AM_FCFLAGS="${AM_FCFLAGS} -I."
 
-dnl  AC_MSG_CHECKING(if compiler supports -I. option)
-dnl  AC_TRY_FCOMPILE([
-dnl      program conftest
-dnl      end
-dnl  ], AC_MSG_RESULT(yes),
-dnl     AC_MSG_RESULT(no)
-dnl     AM_FCFLAGS="$AM_FCFLAGS_saved")
+  dnl  AC_MSG_CHECKING(if compiler supports -I. option)
+  dnl  AC_TRY_FCOMPILE([
+  dnl      program conftest
+  dnl      end
+  dnl  ], AC_MSG_RESULT(yes),
+  dnl     AC_MSG_RESULT(no)
+  dnl     AM_FCFLAGS="$AM_FCFLAGS_saved")
 
-dnl --------------------------------------------------------------------
-dnl See if the fortran compiler supports the intrinsic function "SIZEOF"
+  dnl --------------------------------------------------------------------
+  dnl See if the fortran compiler supports the intrinsic function "SIZEOF"
 
   AC_MSG_CHECKING([if Fortran compiler supports intrinsic SIZEOF])
   AC_TRY_RUN([ 
@@ -454,10 +489,8 @@ dnl See if the fortran compiler supports the intrinsic function "SIZEOF"
      	HAVE_SIZEOF="yes"],
        AC_MSG_RESULT(no))
 
-
-dnl Check to see if -r8 was specified to determine if we need to
-dnl compile the DOUBLE PRECISION interfaces.
-
+  dnl Check to see if -r8 was specified to determine if we need to
+  dnl compile the DOUBLE PRECISION interfaces.
 
   AC_MSG_CHECKING([if Fortran default REAL is DOUBLE PRECISION])
   
@@ -486,14 +519,48 @@ dnl compile the DOUBLE PRECISION interfaces.
    AC_MSG_RESULT(no), 
    [AC_MSG_RESULT(yes) 
        FORTRAN_DEFAULT_REALisDBLE="yes"])
-  dnl Change back to the C language
-  AC_LANG_POP(Fortran)
+
+  if test "X$HDF_FORTRAN2003" = "Xyes"; then
+
+    dnl Checking if the compiler supports the required Fortran 2003 features and
+    dnl disable Fortran 2003 if it does not.
+
+    AC_MSG_CHECKING([if Fortran compiler version compatible with Fortran 2003 HDF])
+    HAVE_FORTRAN_2003="no"
+	
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[
+
+	USE iso_c_binding
+	IMPLICIT NONE
+	TYPE(C_PTR) :: ptr
+	TYPE(C_FUNPTR) :: funptr
+	CHARACTER(LEN=80, KIND=c_char), TARGET :: ichr
+
+	ptr = C_LOC(ichr(1:1))
+
+        ])], 
+        [AC_MSG_RESULT(yes) 
+        HAVE_F2003_REQUIREMENTS=[yes]],
+        [AC_MSG_RESULT(no)])
+
+    if test "X$HAVE_F2003_REQUIREMENTS" = "Xno"; then
+    dnl  echo $HAVE_FORTRAN_2003
+      AC_MSG_ERROR([Fortran compiler lacks required Fortran 2003 features; unsupported Fortran 2003 compiler, remove --enable-fortran2003])
+    else
+      HAVE_FORTRAN_2003="yes"
+    dnl  echo $HAVE_FORTRAN_2003
+    fi
+
+  fi
 else
-  echo "no"
   FC="no"
 fi
 
+dnl Change back to the C language
+AC_LANG_POP(Fortran)
+
 AM_CONDITIONAL([FORTRAN_HAVE_SIZEOF], [test "X$HAVE_SIZEOF" = "Xyes"])
+AM_CONDITIONAL([FORTRAN_2003_CONDITIONAL_F], [test "X$HAVE_FORTRAN_2003" = "Xyes"])
 AM_CONDITIONAL([FORTRAN_DEFAULT_REALisDBLE_F], [test "X$FORTRAN_DEFAULT_REALisDBLE" = "Xyes"])
 
 dnl ----------------------------------------------------------------------
@@ -782,7 +849,7 @@ dnl Furthermore, the name of the compiler might tell us how to run the
 dnl resulting executable. For `mpif90' the executable should be run with
 dnl `mpiexec' from the same directory as mpif90 if it exists.
 dnl
-if test "X$HDF_FORTRAN" = "Xyes"; then
+if test "X$HDF_FORTRAN" = "Xyes" ; then
   dnl Change to the Fortran 90 language
   AC_LANG_PUSH(Fortran)
 
@@ -1191,7 +1258,7 @@ case "X-$enable_production" in
   *)
     enable_production="user-defined"
     AC_MSG_RESULT([user-defined])
-    CONFIG_MODE="$X-enableval"
+    CONFIG_MODE="$enableval"
     ;;
 esac
 
@@ -1215,11 +1282,14 @@ AC_HEADER_STDC
 AC_HEADER_TIME
 
 dnl ----------------------------------------------------------------------
-dnl Check for these two functions before <sys/time.h> is checked for, otherwise
-dnl they are not detected correctly on Solaris [2.6].
+dnl Check for these two functions before the time headers are checked
+dnl for, otherwise they are not detected correctly on Solaris (the
+dnl configure test will fail due to multiply-defined symbols).
 dnl
 AC_CHECK_FUNCS(difftime)
 AC_CHECK_FUNCS(gettimeofday, [have_gettime="yes"], [have_gettime="no"])
+AC_SEARCH_LIBS([clock_gettime], [rt posix4])
+AC_CHECK_FUNCS([clock_gettime],[have_clock_gettime="yes"],[have_clock_gettime="no"])
 
 dnl Unix
 AC_CHECK_HEADERS([sys/resource.h sys/time.h unistd.h sys/ioctl.h sys/stat.h])
@@ -1227,6 +1297,9 @@ AC_CHECK_HEADERS([sys/socket.h sys/types.h])
 AC_CHECK_HEADERS([stddef.h setjmp.h features.h])
 AC_CHECK_HEADERS([stdint.h], [C9x=yes])
 
+dnl Darwin
+AC_CHECK_HEADERS([mach/mach_time.h])
+
 dnl Windows
 case "`uname`" in
   CYGWIN*)
@@ -1408,25 +1481,32 @@ case "$host_cpu-$host_vendor-$host_os" in
     dnl H5_CPPFLAGS because fdopen and HDfdopen fail without it. HDfdopen
     dnl is used only by H5_debug_mask which is used only when debugging in
     dnl H5_init_library (all in H5.c).  When the flag was removed this was
-    dnl the only compile failure noted;  however, defining the Macro 
-    dnl makes available the functionality from the POSIX.1 standard as well
-    dnl as all or the ISO C facilities, according to a discussion of 
-    dnl defining the _POSIX_SOURCE, _BSD_SOURCE, and _POSIX_C_SOURCE Macros
-    dnl and their interaction found at 
-    dnl http://www.gnu.org/s/libc/manual/html_node/Feature-Test-Macros.html.
-    H5_CPPFLAGS="-D_POSIX_SOURCE $H5_CPPFLAGS"
+    dnl the only compile failure noted.
+    dnl This was originally defined as _POSIX_SOURCE which was updated to
+    dnl _POSIX_C_SOURCE=199506L to expose a greater amount of POSIX
+    dnl functionality so clock_gettime and CLOCK_MONOTONIC are defined
+    dnl correctly.
+    dnl POSIX feature information can be found in the gcc manual at:
+    dnl http://www.gnu.org/s/libc/manual/html_node/Feature-Test-Macros.html
+    H5_CPPFLAGS="-D_POSIX_C_SOURCE=199506L $H5_CPPFLAGS"
 
     dnl Also add BSD support on Linux systems, so <features.h> defines
     dnl __USE_BSD, which is required to get the prototype for strdup
     dnl defined correctly in <string.h> and snprintf & vsnprintf defined
     dnl correctly in <stdio.h>
+    dnl Linking to the bsd-compat library is required as per the gcc manual:
+    dnl http://www.gnu.org/s/libc/manual/html_node/Feature-Test-Macros.html
+    dnl though we do not do this as it breaks the big test on older versions
+    dnl of linux (CentOS 4.6) using newer versions of gcc (4.6.2).
     AM_CPPFLAGS="-D_BSD_SOURCE $AM_CPPFLAGS"
     ;;
 esac
 
-dnl Need to add AM_CPPFLAGS into CPPFLAGS to make them visible for configure checks.
-dnl Note: CPPFLAGS will be restored by the end of configure.
-CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS"
+dnl Need to add the AM_ and H5_ into CPFLAGS/CPPFLAGS to make them visible 
+dnl for configure checks.
+dnl Note: Both will be restored by the end of configure.
+CPPFLAGS="$H5_CPPFLAGS $AM_CPPFLAGS $CPPFLAGS"
+CFLAGS="$H5_CFLAGS $AM_CFLAGS $CFLAGS"
 
 AC_TRY_COMPILE([#include <sys/types.h>],
                [off64_t n = 0;],
@@ -1973,6 +2053,12 @@ if test "X$THREADSAFE" = "Xyes"; then
 fi
 
 dnl ----------------------------------------------------------------------
+dnl Check for MONOTONIC_TIMER support (used in clock_gettime).  This has
+dnl to be done after any POSIX/BSD defines to ensure that the test gets
+dnl the correct POSIX level on linux.
+AC_CHECK_DECL(CLOCK_MONOTONIC,[have_clock_monotonic="yes"],[have_clock_monotonic="no"],[[#include <time.h>]])
+
+dnl ----------------------------------------------------------------------
 dnl How does one figure out the local time zone?  Anyone know of a
 dnl Posix way to do this?
 dnl
@@ -2837,76 +2923,36 @@ if test -n "$PARALLEL"; then
     AC_MSG_RESULT([no])
   fi
 
-dnl ----------------------------------------------------------------------
-dnl Set the flag to indicate that the MPI_File_get_size() function
-dnl works.  The default is enabled unless the user knows the function
-dnl doesn't work on the system and disables it.  (This flag should be set
-dnl for all machines except for SGI Altix Propack 4 where the function 
-dnl doesn't return correct file size.)
-dnl
-AC_ARG_ENABLE([mpi-size],
-              [AC_HELP_STRING([--enable-mpi-size],
-                              [Some systems (only SGI Altix Propack 4 so far) return wrong value
-                               from MPI_File_get_size.  By disabling this function, the library
-                               will replace it with stat to get the correct file size.
-                               [default=yes]])],
-              [MPI_GET_SIZE=$enableval])
-
-AC_MSG_CHECKING([if MPI_File_get_size is enabled])
-
-AC_SUBST(MPI_GET_SIZE)
-case "X-$MPI_GET_SIZE" in
-  X-no)
-    AC_MSG_RESULT([no])
-    MPI_GET_SIZE=no
-    ;;
-  X-yes|*)
-    AC_MSG_RESULT([yes])
-    MPI_GET_SIZE=yes
-    AC_DEFINE([HAVE_MPI_GET_SIZE], [1],
-              [Define if MPI_File_get_size works correctly])
-    ;;
-esac
-
-dnl ----------------------------------------------------------------------
-dnl Check to see whether the complicate MPI derived datatype works. 
-dnl In Dec. 20th, 2004, we found that IBM's MPIO implemention didn't
-dnl handle with the displacement of the complicate MPI type derived datatype 
-dnl correctly. So we add the check here.
-dnl IBM fixed this bug in their new version that supported MPI-IO around spring 2005. 
-dnl We find that mpich 1.2.5 has the similar bug. The same
-dnl bug also occurs at SGI IRIX 6.5 C with compiler version lower than or equal to 7.3.
-dnl In case people still use the old compiler, we keep this flag.
-AC_MSG_CHECKING([if irregular hyperslab optimization code works inside MPI-IO])
-
-AC_CACHE_VAL([hdf5_cv_mpi_complex_derived_datatype_works],[hdf5_cv_mpi_complex_derived_datatype_works=yes])
-
-if test ${hdf5_cv_mpi_complex_derived_datatype_works} = "yes"; then
-  AC_DEFINE([MPI_COMPLEX_DERIVED_DATATYPE_WORKS], [1],
-            [Define if your system can handle complicated MPI derived datatype correctly.])
-  AC_MSG_RESULT([yes])
-else
-  AC_MSG_RESULT([no])
-fi
-
-
-dnl ----------------------------------------------------------------------
-dnl Check to see whether MPI-IO can do collective IO successfully when one or more processes don't do 
-dnl any IOs.
-dnl Up to now(Feb. 8th, 2006), we find that it will cause program hung with mpich 1.2.x version 
-dnl and SGI altix. For those systems, we have to turn off this feature and use independent IO instead.
-dnl
-AC_MSG_CHECKING([if MPI-IO can do collective IO when one or more processes don't do IOs])
-
-AC_CACHE_VAL([hdf5_cv_mpi_special_collective_io_works],[hdf5_cv_mpi_special_collective_io_works=yes])
-
-if test ${hdf5_cv_mpi_special_collective_io_works} = "yes"; then
-  AC_DEFINE([MPI_SPECIAL_COLLECTIVE_IO_WORKS], [1],
-            [Define if your system can handle special collective IO properly.])
-  AC_MSG_RESULT([yes])
-else
-  AC_MSG_RESULT([no])
-fi
+  dnl ----------------------------------------------------------------------
+  dnl Set the flag to indicate that the MPI_File_get_size() function
+  dnl works.  The default is enabled unless the user knows the function
+  dnl doesn't work on the system and disables it.  (This flag should be set
+  dnl for all machines except for SGI Altix Propack 4 where the function 
+  dnl doesn't return correct file size.)
+  dnl
+  AC_ARG_ENABLE([mpi-size],
+                [AC_HELP_STRING([--enable-mpi-size],
+                                [Some systems (only SGI Altix Propack 4 so far) return wrong value
+                                 from MPI_File_get_size.  By disabling this function, the library
+                                 will replace it with stat to get the correct file size.
+                                 [default=yes]])],
+                [MPI_GET_SIZE=$enableval])
+
+  AC_MSG_CHECKING([if MPI_File_get_size is enabled])
+
+  AC_SUBST(MPI_GET_SIZE)
+  case "X-$MPI_GET_SIZE" in
+    X-no)
+      AC_MSG_RESULT([no])
+      MPI_GET_SIZE=no
+      ;;
+    X-yes|*)
+      AC_MSG_RESULT([yes])
+      MPI_GET_SIZE=yes
+      AC_DEFINE([HAVE_MPI_GET_SIZE], [1],
+                [Define if MPI_File_get_size works correctly])
+      ;;
+  esac
 fi
 
 dnl ----------------------------------------------------------------------
@@ -4280,26 +4326,6 @@ AC_ARG_ENABLE([embedded-libinfo],
 
 
 dnl ----------------------------------------------------------------------
-dnl Enable h5dump packed bits feature
-dnl
-AC_MSG_CHECKING([Whether to enable the h5dump packed bits feature])
-AC_ARG_ENABLE([h5dump-packed-bits],
-    [AC_HELP_STRING([--enable-h5dump-packed-bits],
-	[Enable h5dump packed bits feature [default=yes]])],
-	[enable_h5dump_packed_bits=$enableval],
-	[enable_h5dump_packed_bits=yes])
-
-   if test "${enable_h5dump_packed_bits}" = "yes"; then
-      AC_MSG_RESULT([yes])
-      AC_DEFINE([HAVE_H5DUMP_PACKED_BITS], [1],
-                [Define if h5dump packed bits feature is enabled])
-   else
-      AC_MSG_RESULT([no])
-      PACKED_BITS=no
-    fi
-
-
-dnl ----------------------------------------------------------------------
 dnl Check if pointer alignments are enforced
 dnl
 AC_MSG_CHECKING([if alignment restrictions are strictly enforced])
diff --git a/examples/Makefile.in b/examples/Makefile.in
index 6eae57d..597e6de 100644
--- a/examples/Makefile.in
+++ b/examples/Makefile.in
@@ -145,6 +145,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -165,10 +166,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -212,7 +215,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/examples/h5_elink_unix2win.c b/examples/h5_elink_unix2win.c
index bcbb65f..9c0918c 100644
--- a/examples/h5_elink_unix2win.c
+++ b/examples/h5_elink_unix2win.c
@@ -138,11 +138,11 @@ const H5L_class_t elink_unix2win_class[1] = {{
 static int
 unix2win_example(void)
 {
-    hid_t	fid = (-1);     		/* File ID */
-    hid_t	gid = (-1);     		/* Group ID */
+    hid_t  fid = (-1);         /* File ID */
+    hid_t  gid = (-1);         /* Group ID */
 
     /* Create the target file. */
-#ifdef _WIN32
+#ifdef H5_HAVE_WIN32_API
     if((fid=H5Fcreate("u2w\\u2w_target.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT))<0) goto error;
 #else
     if((fid=H5Fcreate("u2w/u2w_target.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT))<0) goto error;
@@ -161,7 +161,7 @@ unix2win_example(void)
      * that external links can be traversed.
      */
 
-#ifdef _WIN32
+#ifdef H5_HAVE_WIN32_API
     /* Register the elink_unix2win class defined above to replace default
      * external links
      */
@@ -181,8 +181,8 @@ unix2win_example(void)
  error:
     printf("Error!\n");
     H5E_BEGIN_TRY {
-    	H5Gclose (gid);
-    	H5Fclose (fid);
+      H5Gclose (gid);
+      H5Fclose (fid);
     } H5E_END_TRY;
     return -1;
 }
@@ -195,7 +195,7 @@ unix2win_example(void)
 int
 main(void)
 {
-    int		ret;
+    int    ret;
 
     printf("Testing unix2win external links.\n");
     ret = unix2win_example();
diff --git a/examples/run-c-ex.sh.in b/examples/run-c-ex.sh.in
old mode 100755
new mode 100644
diff --git a/examples/testh5cc.sh.in b/examples/testh5cc.sh.in
old mode 100755
new mode 100644
diff --git a/fortran/Makefile.in b/fortran/Makefile.in
index 1102259..9f006f0 100644
--- a/fortran/Makefile.in
+++ b/fortran/Makefile.in
@@ -182,6 +182,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -202,10 +203,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -249,7 +252,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/fortran/examples/CMakeLists.txt b/fortran/examples/CMakeLists.txt
index ee459e1..47c221c 100644
--- a/fortran/examples/CMakeLists.txt
+++ b/fortran/examples/CMakeLists.txt
@@ -30,6 +30,13 @@ SET (examples
     compound
 )
 
+SET (F2003_examples
+    rwdset_fortran2003
+    nested_derived_type
+    compound_fortran2003
+    compound_complex_fortran2003
+)
+
 FOREACH (example ${examples})
   ADD_EXECUTABLE (f90_ex_${example} ${HDF5_F90_EXAMPLES_SOURCE_DIR}/${example}.f90)
   TARGET_NAMING (f90_ex_${example} ${LIB_TYPE})
@@ -37,7 +44,7 @@ FOREACH (example ${examples})
   IF (WIN32 AND NOT CYGWIN)
     SET_PROPERTY (TARGET f90_ex_${example} 
         APPEND PROPERTY COMPILE_DEFINITIONS 
-  	      HDF5F90_WINDOWS
+          HDF5F90_WINDOWS
     )
   ENDIF (WIN32 AND NOT CYGWIN)
   TARGET_LINK_LIBRARIES (f90_ex_${example}
@@ -48,10 +55,40 @@ FOREACH (example ${examples})
 
   IF (BUILD_TESTING)
     ADD_TEST (NAME f90_ex_${example} COMMAND $<TARGET_FILE:f90_ex_${example}>)
+    IF (NOT "${last_test}" STREQUAL "")
+      SET_TESTS_PROPERTIES (f90_ex_${example} PROPERTIES DEPENDS ${last_test})
+    ENDIF (NOT "${last_test}" STREQUAL "")
+    SET (last_test "f90_ex_${example}")
   ENDIF (BUILD_TESTING)
 
 ENDFOREACH (example ${examples})
 
+IF (FORTRAN_HAVE_ISO_C_BINDING AND HDF5_ENABLE_F2003)
+  FOREACH (example ${F2003_examples})
+    ADD_EXECUTABLE (f03_ex_${example} ${HDF5_F90_EXAMPLES_SOURCE_DIR}/${example}.f90)
+    TARGET_NAMING (f03_ex_${example} ${LIB_TYPE})
+    TARGET_FORTRAN_WIN_PROPERTIES (f03_ex_${example} "")
+    IF (WIN32 AND NOT CYGWIN)
+      SET_PROPERTY (TARGET f03_ex_${example} 
+          APPEND PROPERTY COMPILE_DEFINITIONS HDF5F90_WINDOWS
+      )
+    ENDIF (WIN32 AND NOT CYGWIN)
+    TARGET_LINK_LIBRARIES (f03_ex_${example}
+        ${HDF5_F90_LIB_TARGET}
+        ${HDF5_LIB_TARGET}
+    )
+    SET_TARGET_PROPERTIES (f03_ex_${example} PROPERTIES LINKER_LANGUAGE Fortran)
+
+    IF (BUILD_TESTING)
+      ADD_TEST (NAME f03_ex_${example} COMMAND $<TARGET_FILE:f03_ex_${example}>)
+      IF (NOT "${last_test}" STREQUAL "")
+        SET_TESTS_PROPERTIES (f03_ex_${example} PROPERTIES DEPENDS ${last_test})
+      ENDIF (NOT "${last_test}" STREQUAL "")
+      SET (last_test "f03_ex_${example}")
+    ENDIF (BUILD_TESTING)
+  ENDFOREACH (example ${F2003_examples})
+ENDIF (FORTRAN_HAVE_ISO_C_BINDING AND HDF5_ENABLE_F2003)
+
 IF (H5_HAVE_PARALLEL)
   ADD_EXECUTABLE (f90_ex_ph5example ${HDF5_F90_EXAMPLES_SOURCE_DIR}/ph5example.f90)
   TARGET_NAMING (f90_ex_ph5example ${LIB_TYPE})
diff --git a/fortran/examples/Makefile.am b/fortran/examples/Makefile.am
index 57a8f94..7465b98 100644
--- a/fortran/examples/Makefile.am
+++ b/fortran/examples/Makefile.am
@@ -31,18 +31,28 @@ endif
 # be run.
 # We don't tell automake about these programs so that it doesn't try to
 # compile them with the regular fortran compiler.
-TEST_PROG=dsetexample fileexample rwdsetexample attrexample groupexample    \
-       grpsexample grpdsetexample hyperslab selectele grpit refobjexample   \
-       refregexample mountexample compound
-TEST_SCRIPT=testh5fc.sh
+
+TEST_PROG=dsetexample fileexample rwdsetexample attrexample groupexample \
+     grpsexample grpdsetexample hyperslab selectele grpit refobjexample  \
+     refregexample mountexample compound
 
 # List files to be installed here
-INSTALL_FILES=dsetexample.f90 fileexample.f90 rwdsetexample.f90             \
-       attrexample.f90 groupexample.f90 grpsexample.f90 grpdsetexample.f90  \
-       hyperslab.f90 selectele.f90 grpit.f90 refobjexample.f90              \
-       refregexample.f90 mountexample.f90 compound.f90 ph5example.f90
+INSTALL_FILES=dsetexample.f90 fileexample.f90 rwdsetexample.f90           \
+     attrexample.f90 groupexample.f90 grpsexample.f90 grpdsetexample.f90  \
+     hyperslab.f90 selectele.f90 grpit.f90 refobjexample.f90              \
+     refregexample.f90 mountexample.f90  compound.f90 ph5example.f90
 INSTALL_SCRIPT_FILES = run-fortran-ex.sh
 
+
+# Add attention tests for Fortran 2003 features
+if FORTRAN_2003_CONDITIONAL_F
+  TEST_PROG +=  rwdset_fortran2003 nested_derived_type \
+      compound_fortran2003 compound_complex_fortran2003
+  INSTALL_FILES +=  rwdset_fortran2003.f90 nested_derived_type.f90 \
+      compound_fortran2003.f90 compound_complex_fortran2003.f90
+endif
+TEST_SCRIPT=testh5fc.sh
+
 # Mark this directory as part of the Fortran API
 FORTRAN_API=yes
 
@@ -89,6 +99,12 @@ refregexample: refregexample.f90
 mountexample: mountexample.f90
 compound: compound.f90
 ph5example: ph5example.f90
+if FORTRAN_2003_CONDITIONAL_F
+rwdset_fortran2003: rwdset_fortran2003.f90
+nested_derived_type: nested_derived_type.f90
+compound_fortran2003: compound_fortran2003.f90
+compound_complex_fortran2003: compound_complex_fortran2003.f90
+endif
 
 include $(top_srcdir)/config/examples.am
 include $(top_srcdir)/config/conclude.am
diff --git a/fortran/examples/Makefile.in b/fortran/examples/Makefile.in
index 013c6c3..6593fca 100644
--- a/fortran/examples/Makefile.in
+++ b/fortran/examples/Makefile.in
@@ -59,6 +59,14 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
 	$(top_srcdir)/config/commence.am \
 	$(top_srcdir)/config/conclude.am \
 	$(top_srcdir)/config/examples.am
+
+# Add attention tests for Fortran 2003 features
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@am__append_1 = rwdset_fortran2003 nested_derived_type \
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@      compound_fortran2003 compound_complex_fortran2003
+
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@am__append_2 = rwdset_fortran2003.f90 nested_derived_type.f90 \
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@      compound_fortran2003.f90 compound_complex_fortran2003.f90
+
 TESTS =
 subdir = fortran/examples
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -145,6 +153,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -165,10 +174,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -212,7 +223,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
@@ -368,19 +378,19 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog *.h5
 # be run.
 # We don't tell automake about these programs so that it doesn't try to
 # compile them with the regular fortran compiler.
-TEST_PROG = dsetexample fileexample rwdsetexample attrexample groupexample    \
-       grpsexample grpdsetexample hyperslab selectele grpit refobjexample   \
-       refregexample mountexample compound
-
-TEST_SCRIPT = testh5fc.sh
+TEST_PROG = dsetexample fileexample rwdsetexample attrexample \
+	groupexample grpsexample grpdsetexample hyperslab selectele \
+	grpit refobjexample refregexample mountexample compound \
+	$(am__append_1)
 
 # List files to be installed here
-INSTALL_FILES = dsetexample.f90 fileexample.f90 rwdsetexample.f90             \
-       attrexample.f90 groupexample.f90 grpsexample.f90 grpdsetexample.f90  \
-       hyperslab.f90 selectele.f90 grpit.f90 refobjexample.f90              \
-       refregexample.f90 mountexample.f90 compound.f90 ph5example.f90
-
+INSTALL_FILES = dsetexample.f90 fileexample.f90 rwdsetexample.f90 \
+	attrexample.f90 groupexample.f90 grpsexample.f90 \
+	grpdsetexample.f90 hyperslab.f90 selectele.f90 grpit.f90 \
+	refobjexample.f90 refregexample.f90 mountexample.f90 \
+	compound.f90 ph5example.f90 $(am__append_2)
 INSTALL_SCRIPT_FILES = run-fortran-ex.sh
+TEST_SCRIPT = testh5fc.sh
 
 # Mark this directory as part of the Fortran API
 FORTRAN_API = yes
@@ -655,6 +665,10 @@ refregexample: refregexample.f90
 mountexample: mountexample.f90
 compound: compound.f90
 ph5example: ph5example.f90
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@rwdset_fortran2003: rwdset_fortran2003.f90
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@nested_derived_type: nested_derived_type.f90
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@compound_fortran2003: compound_fortran2003.f90
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@compound_complex_fortran2003: compound_complex_fortran2003.f90
 
 # How to create EXAMPLEDIR if it doesn't already exist
 $(EXAMPLEDIR):
diff --git a/fortran/examples/compound_complex_fortran2003.f90 b/fortran/examples/compound_complex_fortran2003.f90
new file mode 100644
index 0000000..19671f7
--- /dev/null
+++ b/fortran/examples/compound_complex_fortran2003.f90
@@ -0,0 +1,117 @@
+! This is the F2003 version of the h5_compound.c example source code.
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+! 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://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *
+! access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! This example shows how to create an array of a compound datatype which 
+! contains an array of type complex and how to write it to hdf5 
+! and how to read it back into a compound datatype for hdf5.
+!
+
+PROGRAM compound_complex_fortran2003
+
+  USE hdf5
+  USE ISO_C_BINDING
+  IMPLICIT NONE
+
+  INTEGER, PARAMETER :: r_k8 = KIND(0.0d0)
+  INTEGER, PARAMETER :: NMAX = 3
+
+  TYPE sample
+     COMPLEX(KIND=r_k8), DIMENSION(1:NMAX) :: nlev
+     REAL(KIND=r_k8) :: N
+  END TYPE sample
+
+  INTEGER(HID_T)   :: sample_type_id, dset_id, dspace_id, file_id
+  INTEGER(HSIZE_T) :: dims(1) = (/NMAX/)
+  INTEGER :: error
+
+  TYPE(sample), DIMENSION(1:NMAX), TARGET :: samples, read_samples
+  INTEGER :: i
+
+  TYPE(C_PTR) :: f_ptr
+  INTEGER(HSIZE_T), DIMENSION(1) :: array_dims=(/2*NMAX/) ! complex is really (real,real) so double size of array
+  INTEGER(hid_t) :: array_type_id                    ! Nested Array Datatype ID
+
+  ! Initialize data
+  DO i=1,NMAX
+     samples(i)%nlev(1:NMAX) = (3.14159_r_k8, 2.71828_r_k8)
+     samples(i)%N = i
+  END DO
+
+  ! Initialize FORTRAN interface.
+  CALL h5open_f(error)
+
+  ! Create a new file using default properties.
+  CALL h5fcreate_f("test.h5", H5F_ACC_TRUNC_F, file_id, error)
+  !
+  ! Create the memory data type.
+  !
+  CALL H5Tcreate_f(H5T_COMPOUND_F, H5OFFSETOF(C_LOC(samples(1)), C_LOC(samples(2))), sample_type_id, error)
+
+  ! Create the array type
+  CALL h5Tarray_create_f(H5T_NATIVE_DOUBLE, 1, array_dims, array_type_id, error)
+  ! Then use that array type to insert values into
+  CALL H5Tinsert_f( sample_type_id, "nlev", &
+       H5OFFSETOF(C_LOC(samples(1)),C_LOC(samples(1)%nlev(1))), array_type_id, error)
+  CALL H5Tinsert_f( sample_type_id, "N", &
+       H5OFFSETOF(C_LOC(samples(1)),C_LOC(samples(1)%N)), h5kind_to_type(r_k8,H5_REAL_KIND), error)
+  !
+  ! Create dataspace
+  !
+  CALL h5screate_simple_f(1, dims, dspace_id, error)
+  !
+  ! Create the dataset.
+  !
+  CALL H5Dcreate_f(file_id, "samples",  sample_type_id, dspace_id, dset_id, error)
+  !
+  ! Write data to the dataset
+  !
+  f_ptr = C_LOC(samples(1))
+  CALL H5Dwrite_f(dset_id, sample_type_id, f_ptr, error)
+  ! Close up
+  CALL h5dclose_f(dset_id, error)
+  CALL h5sclose_f(dspace_id, error)
+  CALL h5fclose_f(file_id, error)
+  !
+  ! Open the file and the dataset.
+  !
+  CALL H5Fopen_f("test.h5", H5F_ACC_RDONLY_F, file_id, error)
+  
+  CALL H5Dopen_f(file_id, "samples", dset_id, error)
+  !
+  ! Create the memory data type.
+  !
+  CALL H5Tcreate_f(H5T_COMPOUND_F,H5OFFSETOF(C_LOC(samples(1)), C_LOC(samples(2))), sample_type_id,error)
+
+  CALL H5Tinsert_f( sample_type_id, "nlev", &
+       H5OFFSETOF(C_LOC(samples(1)),C_LOC(samples(1)%nlev(1))), array_type_id, error)
+  CALL H5Tinsert_f( sample_type_id, "N", &
+       H5OFFSETOF(C_LOC(samples(1)),C_LOC(samples(1)%N)), h5kind_to_type(r_k8,H5_REAL_KIND), error)
+
+  f_ptr = C_LOC(read_samples(1))
+  CALL H5Dread_f(dset_id, sample_type_id, f_ptr, error)
+
+  !
+  ! Display the fields
+  !
+  DO i=1,NMAX
+     WRITE(*,'(A,3(" (",F8.5,",",F8.5,")"))') "SAMPLES =",read_samples(i)%nlev(1:NMAX)
+     WRITE(*,'(A,F8.5)') "N =", read_samples(i)%N
+  END DO
+
+  CALL H5Tclose_f(sample_type_id, error)
+  CALL H5Dclose_f(dset_id, error)
+  CALL H5Fclose_f(file_id, error)
+
+END PROGRAM compound_complex_fortran2003
diff --git a/fortran/examples/compound_fortran2003.f90 b/fortran/examples/compound_fortran2003.f90
new file mode 100644
index 0000000..a55d1a6
--- /dev/null
+++ b/fortran/examples/compound_fortran2003.f90
@@ -0,0 +1,208 @@
+! This is the F2003 version of the h5_compound.c example source code.
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+! 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://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *
+! access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! This example shows how to create a compound data type,
+! write an array which has the compound data type to the file,
+! and read back fields' subsets.
+!
+
+PROGRAM main
+  USE hdf5
+  USE ISO_C_BINDING
+  IMPLICIT NONE
+
+! KIND parameters
+
+  INTEGER, PARAMETER :: int_k1 = SELECTED_INT_KIND(1)  ! This should map to INTEGER*1 on most modern processors
+  INTEGER, PARAMETER :: int_k2 = SELECTED_INT_KIND(4)  ! This should map to INTEGER*2 on most modern processors
+  INTEGER, PARAMETER :: int_k4 = SELECTED_INT_KIND(8)  ! This should map to INTEGER*4 on most modern processors
+  INTEGER, PARAMETER :: int_k8 = SELECTED_INT_KIND(16) ! This should map to INTEGER*8 on most modern processors
+
+  INTEGER, PARAMETER :: r_k4 = SELECTED_REAL_KIND(5)  ! This should map to REAL*4 on most modern processors
+  INTEGER, PARAMETER :: r_k8 = SELECTED_REAL_KIND(10) ! This should map to REAL*8 on most modern processors
+
+! FILES
+
+  CHARACTER(LEN=*), PARAMETER :: H5FILE_NAME = "SDScompound.h5"
+  CHARACTER(LEN=*), PARAMETER :: DATASETNAME = "ArrayOfStructures"
+
+  INTEGER, PARAMETER :: LENGTH = 10
+  INTEGER, PARAMETER :: RANK = 1
+
+!----------------------------------------------------------------
+! First derived-type and dataset
+  TYPE s1_t
+     CHARACTER(LEN=1), DIMENSION(1:13) :: chr
+     INTEGER(KIND=int_k1) :: a
+     REAL(KIND=r_k4) :: b
+     REAL(KIND=r_k8) :: c
+  END TYPE s1_t
+
+  TYPE(s1_t), TARGET :: s1(LENGTH)
+  INTEGER(hid_t) :: s1_tid     ! File datatype identifier
+
+!----------------------------------------------------------------
+! Second derived-type (subset of s1_t)  and dataset
+  TYPE s2_t
+     CHARACTER(LEN=1), DIMENSION(1:13) :: chr
+     REAL(KIND=r_k8) :: c
+     INTEGER(KIND=int_k1) :: a
+  END TYPE s2_t
+
+  type(s2_t), target :: s2(LENGTH)
+  integer(hid_t) :: s2_tid    ! Memory datatype handle
+
+!----------------------------------------------------------------
+! Third "derived-type" (will be used to read float field of s1)
+  INTEGER(hid_t) :: s3_tid   ! Memory datatype handle
+  REAL(KIND=r_k4), TARGET :: s3(LENGTH)
+
+  INTEGER :: i
+  INTEGER(hid_t) :: file, dataset, space
+  !type(H5F_fileid_type) :: file
+  !type(H5D_dsetid_type) :: dataset
+  !type(H5S_spaceid_type) :: space
+  INTEGER(hsize_t) :: DIM(1) = (/LENGTH/)   ! Dataspace dimensions
+  INTEGER(SIZE_T) :: type_size  ! Size of the datatype
+  INTEGER(SIZE_T) :: offset, sizeof_compound
+  INTEGER :: hdferr
+  TYPE(C_PTR) :: f_ptr
+  
+  INTEGER(SIZE_T) :: type_sizei  ! Size of the integer datatype 
+  INTEGER(SIZE_T) :: type_sizer  ! Size of the real datatype 
+  INTEGER(SIZE_T) :: type_sized  ! Size of the double datatype 
+  INTEGER(hid_t) :: tid3      ! /* Nested Array Datatype ID	*/
+  INTEGER(HSIZE_T), DIMENSION(1) :: tdims1=(/13/)
+  !
+  ! Initialize FORTRAN interface.
+  !
+
+  CALL h5open_f(hdferr)
+
+  !
+  ! Initialize the data
+  !
+  DO i = 0, LENGTH-1
+     s1(i+1)%chr(1)(1:1) = 'a'
+     s1(i+1)%chr(2)(1:1) = 'b'
+     s1(i+1)%chr(3)(1:1) = 'c'
+     s1(i+1)%chr(4:12)(1:1) = ' '
+     s1(i+1)%chr(13)(1:1) = 'd'
+     s1(i+1)%a = i
+     s1(i+1)%b = i*i
+     s1(i+1)%c = 1./REAL(i+1)
+  END DO
+  !
+  ! Create the data space.
+  !
+  !
+  CALL H5Screate_simple_f(RANK, dim, space, hdferr)
+
+  !
+  ! Create the file.
+  !
+  CALL H5Fcreate_f(H5FILE_NAME, H5F_ACC_TRUNC_F, file, hdferr)
+
+  !
+  ! Create the memory data type.
+  !
+  CALL H5Tcreate_f(H5T_COMPOUND_F, H5OFFSETOF(C_LOC(s1(1)), C_LOC(s1(2))), s1_tid, hdferr)
+
+  CALL h5tarray_create_f(H5T_NATIVE_CHARACTER, 1, tdims1, tid3, hdferr)
+
+  CALL H5Tinsert_f(s1_tid, "chr_name", H5OFFSETOF(C_LOC(s1(1)),C_LOC(s1(1)%chr)),tid3, hdferr)
+  CALL H5Tinsert_f(s1_tid, "a_name", H5OFFSETOF(C_LOC(s1(1)),C_LOC(s1(1)%a)), h5kind_to_type(int_k1,H5_INTEGER_KIND), hdferr)
+  CALL H5Tinsert_f(s1_tid, "c_name", H5OFFSETOF(C_LOC(s1(1)),C_LOC(s1(1)%c)), h5kind_to_type(r_k8,H5_REAL_KIND), hdferr)
+  CALL H5Tinsert_f(s1_tid, "b_name", H5OFFSETOF(C_LOC(s1(1)),C_LOC(s1(1)%b)), h5kind_to_type(r_k4,H5_REAL_KIND), hdferr)
+
+  !
+  ! Create the dataset.
+  !
+  CALL H5Dcreate_f(file, DATASETNAME, s1_tid, space, dataset, hdferr)
+
+  !
+  ! Write data to the dataset
+  !
+  
+  f_ptr = C_LOC(s1(1))
+  CALL H5Dwrite_f(dataset, s1_tid, f_ptr, hdferr)
+
+  !
+  ! Release resources
+  !
+  CALL H5Tclose_f(s1_tid, hdferr)
+  CALL H5Sclose_f(space, hdferr)
+  CALL H5Dclose_f(dataset, hdferr)
+  CALL H5Fclose_f(file, hdferr)
+
+  !
+  ! Open the file and the dataset.
+  !
+
+  CALL H5Fopen_f(H5FILE_NAME, H5F_ACC_RDONLY_F, file, hdferr)
+  
+  CALL H5Dopen_f(file, DATASETNAME, dataset,hdferr)
+
+  !
+  ! Create a data type for s2
+  !
+  CALL H5Tcreate_f(H5T_COMPOUND_F,  H5OFFSETOF(C_LOC(s2(1)), C_LOC(s2(2))), s2_tid, hdferr)
+
+  CALL H5Tinsert_f(s2_tid, "chr_name", H5OFFSETOF(C_LOC(s2(1)),C_LOC(s2(1)%chr)), tid3, hdferr)
+  CALL H5Tinsert_f(s2_tid, "c_name", H5OFFSETOF(C_LOC(s2(1)),C_LOC(s2(1)%c)), h5kind_to_type(r_k8,H5_REAL_KIND), hdferr)
+  CALL H5Tinsert_f(s2_tid, "a_name", H5OFFSETOF(C_LOC(s2(1)),C_LOC(s2(1)%a)), h5kind_to_type(int_k1,H5_INTEGER_KIND), hdferr)
+
+  !
+  ! Read two fields c and a from s1 dataset. Fields in the file
+  ! are found by their names "c_name" and "a_name".
+  s2(:)%c=-1; s2(:)%a=-1;
+
+
+  f_ptr = C_LOC(s2(1))
+  CALL H5Dread_f(dataset, s2_tid, f_ptr, hdferr)
+
+  !
+  ! Display the fields
+  !
+  DO i = 1, length
+     WRITE(*,'(/,A,/,999(A,1X))') "Field chr :", s2(i)%chr(1:13)(1:1)
+  ENDDO
+  WRITE(*,'(/,A,/,999(F8.4,1X))') "Field c :", s2(:)%c
+  WRITE(*,'(/,A,/,999(I0,1X))') "Field a :", s2(:)%a
+  !
+  ! Create a data type for s3.
+  !
+  CALL H5Tcreate_f(H5T_COMPOUND_F, H5OFFSETOF(C_LOC(s3(1)),C_LOC(s3(2))),s3_tid, hdferr)
+
+  CALL H5Tinsert_f(s3_tid, "b_name", 0_size_t, h5kind_to_type(r_k4,H5_REAL_KIND), hdferr)
+  !
+  ! Read field b from s1 dataset. Field in the file is found by its name.
+  !
+  s3(:)=-1
+  f_ptr = C_LOC(s3(1))
+  CALL H5Dread_f(dataset, s3_tid, f_ptr, hdferr)
+  !
+  ! Display the field
+  !
+  WRITE(*,'(/,A,/,999(F8.4,1X))') "Field b :",s3(:)
+  !
+  ! Release resources
+  !
+  CALL H5Tclose_f(s2_tid, hdferr)
+  CALL H5Tclose_f(s3_tid, hdferr)
+  CALL H5Dclose_f(dataset, hdferr)
+  CALL H5Fclose_f(file, hdferr)
+
+END PROGRAM main
diff --git a/fortran/examples/nested_derived_type.f90 b/fortran/examples/nested_derived_type.f90
new file mode 100644
index 0000000..f806110
--- /dev/null
+++ b/fortran/examples/nested_derived_type.f90
@@ -0,0 +1,212 @@
+! 
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+! 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://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *
+! access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! This example shows how to create a nested compound data type,
+! write an array which has the compound data type to the file,
+! and read back fields' subsets.
+
+PROGRAM main
+  USE HDF5
+  USE ISO_C_BINDING
+  IMPLICIT NONE
+
+! KIND parameters
+  INTEGER, PARAMETER :: int_k1 = SELECTED_INT_KIND(Fortran_INTEGER_1)  ! This should map to INTEGER*1 on most modern processors
+  INTEGER, PARAMETER :: int_k4 = SELECTED_INT_KIND(Fortran_INTEGER_2)  ! This should map to INTEGER*2 on most modern processors
+  INTEGER, PARAMETER :: int_k8 = SELECTED_INT_KIND(Fortran_INTEGER_4)  ! This should map to INTEGER*4 on most modern processors
+  INTEGER, PARAMETER :: int_k16 = SELECTED_INT_KIND(Fortran_INTEGER_8) ! This should map to INTEGER*8 on most modern processors
+
+  INTEGER, PARAMETER :: r_k4 = SELECTED_REAL_KIND(Fortran_REAL_4) ! This should map to REAL*4 on most modern processors
+  INTEGER, PARAMETER :: r_k8 = SELECTED_REAL_KIND(Fortran_REAL_8) ! This should map to REAL*8 on most modern processors
+
+! FILES
+
+  CHARACTER(LEN=*), PARAMETER :: H5FILE_NAME = "SDScompound.h5"
+  CHARACTER(LEN=*), PARAMETER :: DATASETNAME = "ArrayOfStructures"
+
+  INTEGER, PARAMETER :: LENGTH = 10
+  INTEGER, PARAMETER :: RANK = 1
+
+!----------------------------------------------------------------
+! Nested derived-type and dataset
+
+  TYPE s4_t
+     INTEGER(int_k8), DIMENSION(1:4) :: x
+  ENDTYPE s4_t
+
+  TYPE s1_t
+     CHARACTER(LEN=1), DIMENSION(1:7) :: chr
+     INTEGER(KIND=int_k1) :: a
+     REAL(KIND=r_k4) :: b
+     TYPE(s4_t) :: d
+     REAL(KIND=r_k8) :: c
+  END TYPE s1_t
+
+  TYPE(s1_t), TARGET, DIMENSION(1:length) :: s1
+  INTEGER(hid_t) :: s1_tid     ! File datatype identifier
+
+!----------------------------------------------------------------
+! Second derived-type (subset of s1_t) and dataset
+  TYPE s2_t
+     CHARACTER(LEN=1), DIMENSION(1:7) :: chr
+     REAL(KIND=r_k8) :: c
+     INTEGER(KIND=int_k1) :: a
+     TYPE(s4_t) :: d
+  END TYPE s2_t
+
+  TYPE(s2_t), TARGET :: s2(LENGTH)
+  integer(hid_t) :: s2_tid    ! Memory datatype handle
+  INTEGER(hid_t) :: tid3a
+!----------------------------------------------------------------
+! Third "derived-type" (will be used to read float field of s1)
+  INTEGER(hid_t) :: s3_tid   ! Memory datatype handle
+  REAL(KIND=r_k4), TARGET :: s3(LENGTH)
+
+  INTEGER :: i
+  INTEGER(hid_t) :: file, dataset, space
+  !type(H5F_fileid_type) :: file
+  !type(H5D_dsetid_type) :: dataset
+  !type(H5S_spaceid_type) :: space
+  INTEGER(hsize_t) :: DIM(1) = (/LENGTH/)   ! Dataspace dimensions
+  INTEGER(SIZE_T) :: type_size  ! Size of the datatype
+  INTEGER(SIZE_T) :: offset, sizeof_compound
+  INTEGER :: hdferr
+  TYPE(C_PTR) :: f_ptr
+  
+  INTEGER(SIZE_T) :: type_sizei  ! Size of the integer datatype 
+  INTEGER(SIZE_T) :: type_sizer  ! Size of the real datatype 
+  INTEGER(SIZE_T) :: type_sized  ! Size of the double datatype 
+  INTEGER(hid_t) :: tid3      ! /* Nested Array Datatype ID	*/
+  INTEGER(HSIZE_T), DIMENSION(1) :: tdims1=(/7/)
+  INTEGER(HSIZE_T), DIMENSION(1) :: tdims1a=(/4/)
+  !
+  ! Initialize FORTRAN interface.
+  !
+  CALL h5open_f(hdferr)
+  !
+  ! Initialize the data
+  !
+  DO i = 0, LENGTH-1
+     s1(i+1)%chr(1:7)(1:1) = (/'a','b','c',' ',' ',' ','d'/)
+     s1(i+1)%a = i
+     s1(i+1)%b = i*i
+     s1(i+1)%c = 1./REAL(i+1)
+     s1(i+1)%d%x(1:4) = (/i,i*10,i*100,i*1000/)
+  END DO
+  !
+  ! Create the data space.
+  !
+  !
+  CALL H5Screate_simple_f(RANK, dim, space, hdferr)
+  !
+  ! Create the file.
+  !
+  CALL H5Fcreate_f(H5FILE_NAME, H5F_ACC_TRUNC_F, file, hdferr)
+  !
+  ! Create the memory data type.
+  !
+  CALL H5Tcreate_f(H5T_COMPOUND_F, H5OFFSETOF(C_LOC(s1(1)), C_LOC(s1(2))), s1_tid, hdferr)
+
+  CALL h5tarray_create_f(H5T_NATIVE_CHARACTER, 1, tdims1, tid3, hdferr)
+
+  CALL H5Tinsert_f(s1_tid, "chr_name", H5OFFSETOF(C_LOC(s1(1)),C_LOC(s1(1)%chr)),tid3, hdferr)
+  CALL H5Tinsert_f(s1_tid, "a_name", H5OFFSETOF(C_LOC(s1(1)),C_LOC(s1(1)%a)), h5kind_to_type(int_k1,H5_INTEGER_KIND), hdferr)
+  CALL H5Tinsert_f(s1_tid, "c_name", H5OFFSETOF(C_LOC(s1(1)),C_LOC(s1(1)%c)), h5kind_to_type(r_k8,H5_REAL_KIND), hdferr)
+  CALL H5Tinsert_f(s1_tid, "b_name", H5OFFSETOF(C_LOC(s1(1)),C_LOC(s1(1)%b)), h5kind_to_type(r_k4,H5_REAL_KIND), hdferr)
+
+  ! Create an array of integer datatype
+  CALL h5tarray_create_f(h5kind_to_type(int_k8,H5_INTEGER_KIND), 1, tdims1a, tid3a, hdferr)
+  CALL H5Tinsert_f(s1_tid, "d_name", H5OFFSETOF(C_LOC(s1(1)),C_LOC(s1(1)%d%x)), tid3a, hdferr)
+
+  !
+  ! Create the dataset.
+  !
+  CALL H5Dcreate_f(file, DATASETNAME, s1_tid, space, dataset, hdferr)
+
+  !
+  ! Write data to the dataset
+  !
+  
+  f_ptr = C_LOC(s1(1))
+  CALL H5Dwrite_f(dataset, s1_tid, f_ptr, hdferr)
+
+  !
+  ! Release resources
+  !
+  CALL H5Tclose_f(s1_tid, hdferr)
+  CALL H5Sclose_f(space, hdferr)
+  CALL H5Dclose_f(dataset, hdferr)
+  CALL H5Fclose_f(file, hdferr)
+
+  !
+  ! Open the file and the dataset.
+  !
+
+  CALL H5Fopen_f(H5FILE_NAME, H5F_ACC_RDONLY_F, file, hdferr)
+  
+  CALL H5Dopen_f(file, DATASETNAME, dataset,hdferr)
+  !
+  ! Create a data type for s2
+  !
+  CALL H5Tcreate_f(H5T_COMPOUND_F,  H5OFFSETOF(C_LOC(s2(1)), C_LOC(s2(2))), s2_tid, hdferr)
+
+  CALL H5Tinsert_f(s2_tid, "chr_name", H5OFFSETOF(C_LOC(s2(1)),C_LOC(s2(1)%chr)), tid3, hdferr)
+  CALL H5Tinsert_f(s2_tid, "c_name", H5OFFSETOF(C_LOC(s2(1)),C_LOC(s2(1)%c)), h5kind_to_type(r_k8,H5_REAL_KIND), hdferr)
+  CALL H5Tinsert_f(s2_tid, "a_name", H5OFFSETOF(C_LOC(s2(1)),C_LOC(s2(1)%a)), h5kind_to_type(int_k1,H5_INTEGER_KIND), hdferr)
+  CALL H5Tinsert_f(s2_tid, "d_name", H5OFFSETOF(C_LOC(s2(1)),C_LOC(s2(1)%d%x)), tid3a, hdferr)
+
+  !
+  ! Read two fields c and a from s1 dataset. Fields in the file
+  ! are found by their names "c_name" and "a_name".
+
+  f_ptr = C_LOC(s2(1))
+  CALL H5Dread_f(dataset, s2_tid, f_ptr, hdferr)
+
+  !
+  ! Display the fields
+  !
+  DO i = 1, length
+     WRITE(*,'(/,A,/,999(A,1X))') "Field chr :", s2(i)%chr(1:7)(1:1)
+  ENDDO
+  WRITE(*,'(/,A,/,999(F8.4,1X))') "Field c :", s2(:)%c
+  WRITE(*,'(/,A,/,999(I0,1X))') "Field a :", s2(:)%a
+  DO i = 1, length
+     WRITE(*,'(/,A,/,999(I0,1X))') "Field d%x :", s2(i)%d%x(:)
+  ENDDO
+  !
+  ! Create a data type for s3.
+  !
+  CALL H5Tcreate_f(H5T_COMPOUND_F, H5OFFSETOF(C_LOC(s3(1)),C_LOC(s3(2))),s3_tid, hdferr)
+
+  CALL H5Tinsert_f(s3_tid, "b_name", 0_size_t, h5kind_to_type(r_k4,H5_REAL_KIND), hdferr)
+  !
+  ! Read field b from s1 dataset. Field in the file is found by its name.
+  !
+  s3(:)=-1
+  f_ptr = C_LOC(s3(1))
+  CALL H5Dread_f(dataset, s3_tid, f_ptr, hdferr)
+  !
+  ! Display the field
+  !
+  WRITE(*,'(/,A,/,999(F8.4,1X))') "Field b :",s3(:)
+  !
+  ! Release resources
+  !
+  CALL H5Tclose_f(s2_tid, hdferr)
+  CALL H5Tclose_f(s3_tid, hdferr)
+  CALL H5Dclose_f(dataset, hdferr)
+  CALL H5Fclose_f(file, hdferr)
+
+END PROGRAM main
diff --git a/fortran/examples/rwdset_fortran2003.f90 b/fortran/examples/rwdset_fortran2003.f90
new file mode 100644
index 0000000..74bda85
--- /dev/null
+++ b/fortran/examples/rwdset_fortran2003.f90
@@ -0,0 +1,181 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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 at hdfgroup.org.     *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!
+!
+! The following example shows how to write and read to/from an existing dataset. 
+! It opens the file created in the previous example, obtains the dataset 
+! identifier, writes the data to the dataset in the file, 
+! then reads the dataset to memory. Uses updated Fortran 2003 interface
+! with different KINDs of integers and reals.
+!
+PROGRAM RWDSET_FORTRAN2003
+
+  USE ISO_C_BINDING
+
+  USE HDF5 ! This module contains all necessary modules 
+        
+  IMPLICIT NONE
+
+  INTEGER, PARAMETER :: int_kind_1 = SELECTED_INT_KIND(Fortran_INTEGER_1)  !should map to INTEGER*1 on most modern processors
+  INTEGER, PARAMETER :: int_kind_4 = SELECTED_INT_KIND(Fortran_INTEGER_2)  !should map to INTEGER*2 on most modern processors
+  INTEGER, PARAMETER :: int_kind_8 = SELECTED_INT_KIND(Fortran_INTEGER_4)  !should map to INTEGER*4 on most modern processors
+  INTEGER, PARAMETER :: int_kind_16 = SELECTED_INT_KIND(Fortran_INTEGER_8) !should map to INTEGER*8 on most modern processors
+
+  INTEGER, PARAMETER :: real_kind_7 = SELECTED_REAL_KIND(Fortran_REAL_4) !should map to REAL*4 on most modern processors
+  INTEGER, PARAMETER :: real_kind_15 = SELECTED_REAL_KIND(Fortran_REAL_8) !should map to REAL*8 on most modern processors
+
+  CHARACTER(LEN=8), PARAMETER :: filename = "dsetf.h5" ! File name
+  CHARACTER(LEN=5), PARAMETER :: dsetname1 = "dset1"     ! Dataset name
+  CHARACTER(LEN=5), PARAMETER :: dsetname2 = "dset2"     ! Dataset name
+  CHARACTER(LEN=5), PARAMETER :: dsetname4 = "dset4"     ! Dataset name
+  CHARACTER(LEN=5), PARAMETER :: dsetname8 = "dset8"     ! Dataset name
+  CHARACTER(LEN=6), PARAMETER :: dsetnamer4 = "dsetr4"     ! Dataset name
+  CHARACTER(LEN=6), PARAMETER :: dsetnamer8 = "dsetr8"     ! Dataset name
+
+  INTEGER(HID_T) :: file_id       ! File identifier 
+  INTEGER(HID_T) :: dset_id1      ! Dataset identifier  
+  INTEGER(HID_T) :: dset_id4      ! Dataset identifier   
+  INTEGER(HID_T) :: dset_id8      ! Dataset identifier  
+  INTEGER(HID_T) :: dset_id16     ! Dataset identifier  
+  INTEGER(HID_T) :: dset_idr4      ! Dataset identifier   
+  INTEGER(HID_T) :: dset_idr8      ! Dataset identifier 
+
+  INTEGER :: error ! Error flag
+  INTEGER :: i, j
+
+! Data buffers:
+
+  INTEGER, DIMENSION(1:4) :: dset_data
+
+  INTEGER(int_kind_1), DIMENSION(1:4), TARGET :: dset_data_i1, data_out_i1
+  INTEGER(int_kind_4), DIMENSION(1:4), TARGET :: dset_data_i4, data_out_i4
+  INTEGER(int_kind_8), DIMENSION(1:4), TARGET :: dset_data_i8, data_out_i8
+  INTEGER(int_kind_16), DIMENSION(1:4), TARGET :: dset_data_i16, data_out_i16
+
+  INTEGER(int_kind_8), DIMENSION(1:4), TARGET :: data_out_i8a
+
+  REAL(real_kind_7), DIMENSION(1:4), TARGET :: dset_data_r7, data_out_r7
+  REAL(real_kind_15), DIMENSION(1:4), TARGET :: dset_data_r15, data_out_r15
+
+  INTEGER(HSIZE_T), DIMENSION(1:1) :: data_dims = (/4/) 
+  INTEGER(HID_T) :: dspace_id     ! Dataspace identifier
+  
+  TYPE(C_PTR) :: f_ptr
+  INTEGER(hid_t) :: datatype         !/* Common datatype ID */
+
+  !
+  ! Initialize FORTRAN interface.
+  !
+  CALL h5open_f(error) 
+  !
+  ! Initialize the dset_data array.
+  !
+  DO i = 1, 4
+     dset_data_i1(i)  = i
+     dset_data_i4(i)  = i
+     dset_data_i8(i)  = i
+     dset_data_i16(i) = i
+
+     dset_data_r7(i) = (i)*100.
+     dset_data_r15(i) = (i)*1000.
+
+  END DO
+
+  CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, error)
+  !
+  ! Create dataspaces for datasets
+  !
+  CALL h5screate_simple_f(1, data_dims , dspace_id, error)
+  !
+  ! Create the dataset.
+  !
+  CALL H5Dcreate_f(file_id, dsetname1, h5kind_to_type(int_kind_1,H5_INTEGER_KIND),  dspace_id, dset_id1, error)
+  CALL H5Dcreate_f(file_id, dsetname2, h5kind_to_type(int_kind_4,H5_INTEGER_KIND),  dspace_id, dset_id4, error)
+  CALL H5Dcreate_f(file_id, dsetname4, h5kind_to_type(int_kind_8,H5_INTEGER_KIND),  dspace_id, dset_id8, error)
+  CALL H5Dcreate_f(file_id, dsetname8, h5kind_to_type(int_kind_16,H5_INTEGER_KIND), dspace_id, dset_id16, error)
+
+  CALL H5Dcreate_f(file_id, dsetnamer4, h5kind_to_type(real_kind_7,H5_REAL_KIND),  dspace_id, dset_idr4, error)
+  CALL H5Dcreate_f(file_id, dsetnamer8, h5kind_to_type(real_kind_15,H5_REAL_KIND), dspace_id, dset_idr8, error)
+
+  !
+  ! Write the dataset.
+  !
+  f_ptr = C_LOC(dset_data_i1(1))
+  CALL h5dwrite_f(dset_id1, h5kind_to_type(int_kind_1,H5_INTEGER_KIND), f_ptr, error)
+  f_ptr = C_LOC(dset_data_i4(1))
+  CALL h5dwrite_f(dset_id4, h5kind_to_type(int_kind_4,H5_INTEGER_KIND), f_ptr, error)
+  f_ptr = C_LOC(dset_data_i8(1))
+  CALL h5dwrite_f(dset_id8, h5kind_to_type(int_kind_8,H5_INTEGER_KIND), f_ptr, error)
+  f_ptr = C_LOC(dset_data_i16(1))
+  CALL h5dwrite_f(dset_id16, h5kind_to_type(int_kind_16,H5_INTEGER_KIND), f_ptr, error)
+  f_ptr = C_LOC(dset_data_r7(1))
+  CALL h5dwrite_f(dset_idr4, h5kind_to_type(real_kind_7,H5_REAL_KIND), f_ptr, error)
+  f_ptr = C_LOC(dset_data_r15(1))
+  CALL h5dwrite_f(dset_idr8, h5kind_to_type(real_kind_15,H5_REAL_KIND), f_ptr, error)
+  !
+  ! Close the file
+  !
+  CALL h5fclose_f(file_id, error)
+
+  ! Open the file
+
+  CALL h5fopen_f(filename, H5F_ACC_RDWR_F, file_id, error)
+  !
+  ! Read the dataset.
+  !
+  ! Read data back into an integer size that is larger then the original size used for 
+  ! writing the data
+  f_ptr = C_LOC(data_out_i8a(1))
+  CALL h5dread_f(dset_id1, h5kind_to_type(int_kind_8,H5_INTEGER_KIND), f_ptr,  error)
+  f_ptr = C_LOC(data_out_i4(1))
+  CALL h5dread_f(dset_id4, h5kind_to_type(int_kind_4,H5_INTEGER_KIND), f_ptr,  error)
+  f_ptr = C_LOC(data_out_i8(1))
+  CALL h5dread_f(dset_id8, h5kind_to_type(int_kind_8,H5_INTEGER_KIND), f_ptr,  error)
+  f_ptr = C_LOC(data_out_i16(1))
+  CALL h5dread_f(dset_id16, h5kind_to_type(int_kind_16,H5_INTEGER_KIND), f_ptr,  error)
+  f_ptr = C_LOC(data_out_r7(1))
+  CALL h5dread_f(dset_idr4, h5kind_to_type(real_kind_7,H5_REAL_KIND), f_ptr,  error)
+  f_ptr = C_LOC(data_out_r15(1))
+  CALL h5dread_f(dset_idr8, h5kind_to_type(real_kind_15,H5_REAL_KIND), f_ptr,  error)
+
+! memory type
+  WRITE(*,'(A,4i8)' )'SELECTED_INT_KIND(Fortran_INTEGER_1):  ',data_out_i8a
+  WRITE(*,'(A,4i8)' )'SELECTED_INT_KIND(Fortran_INTEGER_4):  ',data_out_i4
+  WRITE(*,'(A,4i8)' )'SELECTED_INT_KIND(Fortran_INTEGER_8):  ',data_out_i8
+  WRITE(*,'(A,4i8)' )'SELECTED_INT_KIND(Fortran_INTEGER_16): ',data_out_i16
+  WRITE(*,'(A,4(1x,f9.4))' )'SELECTED_REAL_KIND(Fortran_REAL_7):  ',data_out_r7
+  WRITE(*,'(A,4(1x,f16.10))' )'SELECTED_REAL_KIND(Fortran_REAL_15):  ',data_out_r15
+  !
+  ! Close the dataset.
+  !
+  CALL h5dclose_f(dset_id1, error)
+  CALL h5dclose_f(dset_id4, error)
+  CALL h5dclose_f(dset_id8, error)
+  CALL h5dclose_f(dset_id16, error)
+  CALL h5dclose_f(dset_idr4, error)
+  CALL h5dclose_f(dset_idr8, error)
+  !
+  ! Close the file.
+  !
+  CALL h5fclose_f(file_id, error)
+  !
+  ! Close FORTRAN interface.
+  !
+  CALL h5close_f(error)
+
+END PROGRAM RWDSET_FORTRAN2003
+
+               
+
diff --git a/fortran/examples/testh5fc.sh.in b/fortran/examples/testh5fc.sh.in
index cc26e37..234d4e2 100755
--- a/fortran/examples/testh5fc.sh.in
+++ b/fortran/examples/testh5fc.sh.in
@@ -25,8 +25,7 @@ EXIT_SUCCESS=0
 EXIT_FAILURE=1
 
 # Where the tool is installed.
-# Note: no '/' after DESTDIR.  Explanation in commence.am
-prefix="${prefix:-${DESTDIR}@prefix@}"
+prefix="${prefix:- at prefix@}"
 PARALLEL=@PARALLEL@		# Am I in parallel mode?
 AR="@AR@"
 RANLIB="@RANLIB@"
diff --git a/fortran/robodoc.rc b/fortran/robodoc.rc
new file mode 100644
index 0000000..1366f77
--- /dev/null
+++ b/fortran/robodoc.rc
@@ -0,0 +1,73 @@
+items:
+ NAME
+ COPYRIGHT
+ SYNOPSIS
+ USAGE 
+ FUNCTION
+ DESCRIPTION
+ PURPOSE
+ AUTHOR 
+ CREATION DATE
+ MODIFICATION HISTORY
+ HISTORY 
+ INPUTS 
+ ARGUMENTS
+ OPTIONS 
+ PARAMETERS
+ SWITCHES
+ OUTPUTS 
+ SIDE EFFECTS
+ RESULT
+ RETURN VALUE 
+ EXAMPLE
+ NOTES
+ DIAGNOSTICS 
+ WARNINGS 
+ ERRORS
+ BUGS
+ TODO
+ IDEAS 
+ PORTABILITY
+ SEE ALSO 
+ METHODS
+ NEW METHODS
+ ATTRIBUTES
+ NEW ATTRIBUTES
+ TAGS
+ DERIVED FROM
+ DERIVED BY 
+ USES
+ CHILDREN 
+ USED BY
+ PARENTS
+ COMMANDS
+ SOURCE
+ CONTAINS SUBROUTINES
+ OPTIONAL PARAMETERS
+ FILE
+ignore items:
+ COPYRIGHT
+headertypes:
+ s Subroutines robo_subroutines
+options:
+    --nogeneratedwith	
+    --src ./
+    --doc ./doc/DevelGuide
+    --html
+    --multidoc
+    --index
+    --tabsize 8
+    --sections
+    --sectionnameonly
+    --documenttitle "HDF5 FORTRAN Developer's Guide"
+    --cmode		
+ignore files:
+    .svn
+    *~
+    *.o
+    *e
+    *.mod
+accept files:
+    *.c
+    *.f90
+    *.h
diff --git a/fortran/src/CMakeLists.txt b/fortran/src/CMakeLists.txt
index d5cbc1b..bb927eb 100644
--- a/fortran/src/CMakeLists.txt
+++ b/fortran/src/CMakeLists.txt
@@ -2,15 +2,6 @@ cmake_minimum_required (VERSION 2.8)
 PROJECT (HDF5_F90_SRC C CXX Fortran)
 
 #-----------------------------------------------------------------------------
-# When building utility executables that generate other (source) files :
-# we make use of the following variables defined in the root CMakeLists.
-# Certain systems may add /Debug or /Release to output paths
-# and we need to call the executable from inside the CMake configuration
-#-----------------------------------------------------------------------------
-#inherit EXE_EXT     from parent HDF5 cmake project
-#inherit CFG_INIT    from parent HDF5 cmake project
-
-#-----------------------------------------------------------------------------
 # Setup the Fortran auto-detection utilities
 # H5test_kind(_SIZEOF).f90 used to generate H5fortran_detect.f90
 # H5fortran_detect.f90     used to generate H5fort_type_defines.h
@@ -39,7 +30,7 @@ IF (WIN32 AND MSVC)
 ENDIF (WIN32 AND MSVC)
 SET_TARGET_PROPERTIES (H5test_FortranHavekind PROPERTIES LINKER_LANGUAGE Fortran)
 
-SET (CMD ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}${CFG_INIT}/H5test_FortranHavekind${EXE_EXT})
+SET (CMD $<TARGET_FILE:H5test_FortranHavekind>)
 ADD_CUSTOM_COMMAND (
     OUTPUT ${HDF5_F90_BINARY_DIR}/H5fortran_detect.f90
     COMMAND ${CMD}
@@ -63,9 +54,9 @@ IF (WIN32 AND MSVC)
           LINK_FLAGS "/SUBSYSTEM:CONSOLE"
   )
 ENDIF (WIN32 AND MSVC)
-SET_TARGET_PROPERTIES (H5test_FortranHavekind PROPERTIES LINKER_LANGUAGE Fortran)
+SET_TARGET_PROPERTIES (H5fortran_detect PROPERTIES LINKER_LANGUAGE Fortran)
 
-SET (CMD ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}${CFG_INIT}/H5fortran_detect${EXE_EXT})
+SET (CMD $<TARGET_FILE:H5fortran_detect>)
 ADD_CUSTOM_COMMAND (
     OUTPUT ${HDF5_F90_BINARY_DIR}/H5fort_type_defines.h
     COMMAND ${CMD}
@@ -80,7 +71,7 @@ ADD_EXECUTABLE (H5match_types
     ${HDF5_F90_BINARY_DIR}/H5fort_type_defines.h
     ${HDF5_F90_SRC_SOURCE_DIR}/H5match_types.c
 )
-SET (CMD ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}${CFG_INIT}/H5match_types${EXE_EXT})
+SET (CMD $<TARGET_FILE:H5match_types>)
 ADD_CUSTOM_COMMAND (
     OUTPUT ${HDF5_F90_BINARY_DIR}/H5f90i_gen.h
            ${HDF5_F90_BINARY_DIR}/H5fortran_types.f90
@@ -129,6 +120,17 @@ SET_GLOBAL_VARIABLE (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF
 H5_SET_LIB_OPTIONS (${HDF5_F90_C_LIB_TARGET} ${HDF5_F90_C_LIB_NAME} ${LIB_TYPE})
 
 #-----------------------------------------------------------------------------
+# Fortran 2003 standard
+#-----------------------------------------------------------------------------
+IF (FORTRAN_HAVE_ISO_C_BINDING AND HDF5_ENABLE_F2003)
+  # default real is 4 bytes, so include double signatures
+  SET (F_STATUS "_F03")
+ELSE (FORTRAN_HAVE_ISO_C_BINDING AND HDF5_ENABLE_F2003)
+  # default real is 8 bytes, so exclude double signatures
+  SET (F_STATUS "_F90")
+ENDIF (FORTRAN_HAVE_ISO_C_BINDING AND HDF5_ENABLE_F2003)
+
+#-----------------------------------------------------------------------------
 # Fortran Real Size
 #-----------------------------------------------------------------------------
 IF (FORTRAN_DEFAULT_REAL_NOT_DOUBLE)
@@ -148,6 +150,7 @@ SET (f90_F_SRCS
 
     # normal distribution
     ${HDF5_F90_SRC_SOURCE_DIR}/H5f90global.f90
+    ${HDF5_F90_SRC_SOURCE_DIR}/H5_ff${F_STATUS}.f90
     ${HDF5_F90_SRC_SOURCE_DIR}/H5_ff.f90
     ${HDF5_F90_SRC_SOURCE_DIR}/H5Aff.f90
     ${HDF5_F90_SRC_SOURCE_DIR}/H5Dff.f90
@@ -162,6 +165,14 @@ SET (f90_F_SRCS
     ${HDF5_F90_SRC_SOURCE_DIR}/H5Sff.f90
     ${HDF5_F90_SRC_SOURCE_DIR}/H5Tff.f90
     ${HDF5_F90_SRC_SOURCE_DIR}/H5Zff.f90
+    ${HDF5_F90_SRC_SOURCE_DIR}/H5Aff${F_STATUS}.f90
+    ${HDF5_F90_SRC_SOURCE_DIR}/H5Dff${F_STATUS}.f90
+    ${HDF5_F90_SRC_SOURCE_DIR}/H5Eff${F_STATUS}.f90
+    ${HDF5_F90_SRC_SOURCE_DIR}/H5Lff${F_STATUS}.f90
+    ${HDF5_F90_SRC_SOURCE_DIR}/H5Off${F_STATUS}.f90
+    ${HDF5_F90_SRC_SOURCE_DIR}/H5Pff${F_STATUS}.f90
+    ${HDF5_F90_SRC_SOURCE_DIR}/H5Rff${F_STATUS}.f90
+    ${HDF5_F90_SRC_SOURCE_DIR}/H5Tff${F_STATUS}.f90
     ${HDF5_F90_SRC_SOURCE_DIR}/H5_DBLE_Interface${F_DBLE}.f90
 )
 
@@ -189,16 +200,20 @@ SET (SHARED_LINK_FLAGS " ")
 IF (WIN32 AND NOT CYGWIN)
   IF (BUILD_SHARED_LIBS)
     SET_PROPERTY (TARGET ${HDF5_F90_LIB_TARGET}
-	    APPEND PROPERTY COMPILE_DEFINITIONS
-		    BUILD_HDF5_DLL
-	)
+      APPEND PROPERTY COMPILE_DEFINITIONS
+        BUILD_HDF5_DLL
+    )
     IF (MSVC)
-      SET (SHARED_LINK_FLAGS "/DLL /DEF:${HDF5_F90_SRC_SOURCE_DIR}/hdf5_fortrandll.def")
+      IF (H5_HAVE_PARALLEL)
+        SET (SHARED_LINK_FLAGS "/DLL /DEF:${HDF5_F90_SRC_SOURCE_DIR}/phdf5_fortrandll.def")
+      ELSE (H5_HAVE_PARALLEL)
+        SET (SHARED_LINK_FLAGS "/DLL /DEF:${HDF5_F90_SRC_SOURCE_DIR}/hdf5_fortrandll.def")
+      ENDIF (H5_HAVE_PARALLEL)
     ENDIF (MSVC)
   ENDIF (BUILD_SHARED_LIBS)
   SET_PROPERTY (TARGET ${HDF5_F90_LIB_TARGET}
       APPEND PROPERTY COMPILE_DEFINITIONS
-  	    HDF5F90_WINDOWS
+        HDF5F90_WINDOWS
   )
 ENDIF (WIN32 AND NOT CYGWIN)
 TARGET_FORTRAN_WIN_PROPERTIES (${HDF5_F90_LIB_TARGET} ${SHARED_LINK_FLAGS})
diff --git a/fortran/src/H5Af.c b/fortran/src/H5Af.c
index 8e6158e..896736d 100644
--- a/fortran/src/H5Af.c
+++ b/fortran/src/H5Af.c
@@ -1,4 +1,9 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+/****h* H5Af/H5Af
+ * PURPOSE
+ *   This file contains C stubs for H5A Fortran APIs
+ *
+ * COPYRIGHT
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * Copyright by The HDF Group.                                               *
  * Copyright by the Board of Trustees of the University of Illinois.         *
  * All rights reserved.                                                      *
@@ -11,31 +16,41 @@
  * 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 at hdfgroup.org.     *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/* This files contains C stubs for H5A Fortran APIs */
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ ******
+*/
 
 #include "H5f90.h"
 #include "H5Eprivate.h"
 
-/*----------------------------------------------------------------------------
- * Name:        h5acreate_c
- * Purpose:     Call H5Acreate2 to create an attribute
- * Inputs:      obj_id - object identifier
+/****if* H5Af/h5acreate_c
+ * NAME
+ *        h5acreate_c
+ * PURPOSE
+ *     Call H5Acreate2 to create an attribute
+ * INPUTS
+ *      obj_id - object identifier
  *              name - name of the attribute
  *              namelen - name length
  *              type_id - datatype identifier
  *              space_id - dataspace identifier
  *              crt_pr  - identifier of creation property list
- * Outputs:     attr_id - attribute identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     attr_id - attribute identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, August 12, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5acreate_c(hid_t_f *obj_id, _fcd name, size_t_f *namelen, hid_t_f *type_id,
     hid_t_f *space_id, hid_t_f *crt_prp, hid_t_f *aapl, hid_t_f *attr_id)
+/*******/
 {
     char *c_name = NULL;        /* Buffer to hold C string */
     int_f ret_value = 0;        /* Return value */
@@ -58,20 +73,29 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5aopen_name _c
- * Purpose:     Call H5Aopen to open an attribute
- * Inputs:      obj_id - object identifier
+/****if* H5Af/h5aopen_name_c
+ * NAME
+ *        h5aopen_name_c
+ * PURPOSE
+ *     Call H5Aopen to open an attribute
+ * INPUTS
+ *      obj_id - object identifier
  *              name - name of the attribute
  *              namelen - name length
- * Outputs:     attr_id - dataset identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     attr_id - dataset identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, August 12, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5aopen_name_c (hid_t_f *obj_id, _fcd name, size_t_f *namelen, hid_t_f *attr_id)
+/*******/
 {
     char *c_name = NULL;          /* Buffer to hold C string */
     int_f ret_value = 0;          /* Return value */
@@ -94,22 +118,30 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5awritec_c
- * Purpose:     Call h5awrite_c to write a character  attribute
- * Inputs:      attr_id - dataset identifier
+/****if* H5Af/h5awritec_c
+ * NAME
+ *        h5awritec_c
+ * PURPOSE
+ *     Call h5awrite_c to write a character  attribute
+ * INPUTS
+ *      attr_id - dataset identifier
  *              mem_type_id - memory datatype identifier
  *              buf      - character data buffer
  *              dims     - array to store dimensions sizes of buf; used only
  *                         by Fortran routine.
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday , August 12, 1999
- * Modifications: dims paramete added.
+ * HISTORY
+ * dims paramete added.
  *                April 4, 2001
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5awritec_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -118,6 +150,7 @@ nh5awritec_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 }
 int_f
 nh5awritec_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -127,6 +160,7 @@ nh5awritec_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 
 int_f
 nh5awritec_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -136,6 +170,7 @@ nh5awritec_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 
 int_f
 nh5awritec_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -145,6 +180,7 @@ nh5awritec_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 
 int_f
 nh5awritec_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -154,6 +190,7 @@ nh5awritec_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 
 int_f
 nh5awritec_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -163,6 +200,7 @@ nh5awritec_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 
 int_f
 nh5awritec_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -172,6 +210,7 @@ nh5awritec_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 
 int_f
 nh5awritec_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -181,6 +220,7 @@ nh5awritec_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 
 int_f
 nh5awritec_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -190,26 +230,34 @@ nh5awritec_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5awrite_c
- * Purpose:     Call H5Awrite to write a attribute
- * Inputs:      attr_id - attribute identifier
+/****if* H5Af/h5awrite_c
+ * NAME
+ *        h5awrite_c
+ * PURPOSE
+ *     Call H5Awrite to write a attribute
+ * INPUTS
+ *      attr_id - attribute identifier
  *              mem_type_id - memory datatype identifier
  *              buf      - data buffer
  *              dims     - array to store dimensions sizes of buf; used only
  *                         by Fortran routine.
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, August 12, 1999
- * Modifications: dims parameter added
+ * HISTORY
+ * dims parameter added
  *                                           April 4, 2001
  *                Added nh5awrite_integer(real,double)_s,1-7 functions to eliminate
  *                complains about wrong parameters types in h5awrite_c function
  *                called by Fortran routines.
  *                                           October 9, 2006 EIP
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5awrite_integer_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -219,6 +267,7 @@ nh5awrite_integer_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void U
 
 int_f
 nh5awrite_integer_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -228,6 +277,7 @@ nh5awrite_integer_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void U
 
 int_f
 nh5awrite_integer_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -237,6 +287,7 @@ nh5awrite_integer_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void U
 
 int_f
 nh5awrite_integer_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -246,6 +297,7 @@ nh5awrite_integer_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void U
 
 int_f
 nh5awrite_integer_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -255,6 +307,7 @@ nh5awrite_integer_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void U
 
 int_f
 nh5awrite_integer_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -264,6 +317,7 @@ nh5awrite_integer_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void U
 
 int_f
 nh5awrite_integer_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -273,6 +327,7 @@ nh5awrite_integer_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void U
 
 int_f
 nh5awrite_integer_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -282,6 +337,7 @@ nh5awrite_integer_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void U
 
 int_f
 nh5awrite_real_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -291,6 +347,7 @@ nh5awrite_real_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUS
 
 int_f
 nh5awrite_real_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -300,6 +357,7 @@ nh5awrite_real_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUS
 
 int_f
 nh5awrite_real_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -309,6 +367,7 @@ nh5awrite_real_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUS
 
 int_f
 nh5awrite_real_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -318,6 +377,7 @@ nh5awrite_real_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUS
 
 int_f
 nh5awrite_real_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -327,6 +387,7 @@ nh5awrite_real_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUS
 
 int_f
 nh5awrite_real_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -336,6 +397,7 @@ nh5awrite_real_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUS
 
 int_f
 nh5awrite_real_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -345,6 +407,7 @@ nh5awrite_real_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUS
 
 int_f
 nh5awrite_real_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -354,6 +417,7 @@ nh5awrite_real_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUS
 
 int_f
 nh5awrite_double_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -363,6 +427,7 @@ nh5awrite_double_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UN
 
 int_f
 nh5awrite_double_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -372,6 +437,7 @@ nh5awrite_double_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UN
 
 int_f
 nh5awrite_double_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -381,6 +447,7 @@ nh5awrite_double_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UN
 
 int_f
 nh5awrite_double_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -390,6 +457,7 @@ nh5awrite_double_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UN
 
 int_f
 nh5awrite_double_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -399,6 +467,7 @@ nh5awrite_double_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UN
 
 int_f
 nh5awrite_double_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -408,6 +477,7 @@ nh5awrite_double_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UN
 
 int_f
 nh5awrite_double_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -417,6 +487,7 @@ nh5awrite_double_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UN
 
 int_f
 nh5awrite_double_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -426,6 +497,7 @@ nh5awrite_double_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UN
 
 int_f
 nh5awrite_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
     int_f ret_value=0;          /* Return value */
 
@@ -440,26 +512,35 @@ done:
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5areadc_c
- * Purpose:     Call h5aread_c to read character  attribute
- * Inputs:      dset_id - dataset identifier
+/****if* H5Af/h5areadc_c
+ * NAME
+ *        h5areadc_c
+ * PURPOSE
+ *     Call h5aread_c to read character  attribute
+ * INPUTS
+ *      dset_id - dataset identifier
  *              mem_type_id - memory datatype identifier
  *              dims     - array to store dimensions sizes of buf; used only
  *                         by Fortran routine.
- * Outputs:     buf      - character data buffer
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     buf      - character data buffer
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, August 12, 1999
- * Modifications: dims parameter added.
+ * HISTORY
+ * dims parameter added.
  *                April 4, 2001
  *                Added nh5areadc_s,1-7 functions to eliminate
  *                complains about wrong parameters types in h5awrite_c function
  *                called by Fortran routines.
  *                                           October 9, 2006 EIP
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5areadc_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -468,6 +549,7 @@ nh5areadc_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 }
 int_f
 nh5areadc_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -477,6 +559,7 @@ nh5areadc_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 
 int_f
 nh5areadc_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -486,6 +569,7 @@ nh5areadc_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 
 int_f
 nh5areadc_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -495,6 +579,7 @@ nh5areadc_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 
 int_f
 nh5areadc_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -504,6 +589,7 @@ nh5areadc_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 
 int_f
 nh5areadc_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -513,6 +599,7 @@ nh5areadc_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 
 int_f
 nh5areadc_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -522,6 +609,7 @@ nh5areadc_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 
 int_f
 nh5areadc_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -530,6 +618,7 @@ nh5areadc_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 }
 int_f
 nh5areadc_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -539,26 +628,35 @@ nh5areadc_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5aread_c
- * Purpose:     Call H5Aread to read an attribute
- * Inputs:      dset_id - dataset identifier
+/****if* H5Af/h5aread_c
+ * NAME
+ *        h5aread_c
+ * PURPOSE
+ *     Call H5Aread to read an attribute
+ * INPUTS
+ *      dset_id - dataset identifier
  *              mem_type_id - memory datatype identifier
  *              dims     - array to store dimensions sizes of buf; used only
  *                         by Fortran routine.
- * Outputs:     buf      - data buffer
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     buf      - data buffer
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, August 12, 1999
- * Modifications: dims paramete added.
+ * HISTORY
+ * dims paramete added.
  *                April 4, 2001
  *                Added nh5aread_integer(real,double)_s,1-7 functions to eliminate
  *                complains about wrong parameters types in h5awrite_c function
  *                called by Fortran routines.
  *                                           October 9, 2006 EIP
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5aread_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
     int_f ret_value=0;          /* Return value */
 
@@ -574,6 +672,7 @@ done:
 
 int_f
 nh5aread_integer_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -583,6 +682,7 @@ nh5aread_integer_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UN
 
 int_f
 nh5aread_integer_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -592,6 +692,7 @@ nh5aread_integer_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UN
 
 int_f
 nh5aread_integer_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -601,6 +702,7 @@ nh5aread_integer_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UN
 
 int_f
 nh5aread_integer_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -610,6 +712,7 @@ nh5aread_integer_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UN
 
 int_f
 nh5aread_integer_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -619,6 +722,7 @@ nh5aread_integer_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UN
 
 int_f
 nh5aread_integer_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -628,6 +732,7 @@ nh5aread_integer_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UN
 
 int_f
 nh5aread_integer_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -637,6 +742,7 @@ nh5aread_integer_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UN
 
 int_f
 nh5aread_integer_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -646,6 +752,7 @@ nh5aread_integer_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UN
 
 int_f
 nh5aread_real_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -655,6 +762,7 @@ nh5aread_real_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSE
 
 int_f
 nh5aread_real_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -664,6 +772,7 @@ nh5aread_real_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSE
 
 int_f
 nh5aread_real_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -673,6 +782,7 @@ nh5aread_real_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSE
 
 int_f
 nh5aread_real_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -682,6 +792,7 @@ nh5aread_real_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSE
 
 int_f
 nh5aread_real_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -691,6 +802,7 @@ nh5aread_real_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSE
 
 int_f
 nh5aread_real_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -700,6 +812,7 @@ nh5aread_real_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSE
 
 int_f
 nh5aread_real_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -709,6 +822,7 @@ nh5aread_real_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSE
 
 int_f
 nh5aread_real_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -718,6 +832,7 @@ nh5aread_real_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSE
 
 int_f
 nh5aread_double_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -727,6 +842,7 @@ nh5aread_double_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNU
 
 int_f
 nh5aread_double_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -736,6 +852,7 @@ nh5aread_double_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNU
 
 int_f
 nh5aread_double_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -745,6 +862,7 @@ nh5aread_double_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNU
 
 int_f
 nh5aread_double_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -754,6 +872,7 @@ nh5aread_double_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNU
 
 int_f
 nh5aread_double_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -763,6 +882,7 @@ nh5aread_double_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNU
 
 int_f
 nh5aread_double_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -772,6 +892,7 @@ nh5aread_double_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNU
 
 int_f
 nh5aread_double_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -781,6 +902,7 @@ nh5aread_double_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNU
 
 int_f
 nh5aread_double_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -789,18 +911,26 @@ nh5aread_double_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNU
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5aclose_c
- * Purpose:     Call H5Aclose to close an attribute
- * Inputs:      attr_id - identifier of an attribute to be closed
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Af/h5aclose_c
+ * NAME
+ *        h5aclose_c
+ * PURPOSE
+ *     Call H5Aclose to close an attribute
+ * INPUTS
+ *      attr_id - identifier of an attribute to be closed
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, August 12, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5aclose_c ( hid_t_f *attr_id )
+/******/
 {
     int_f ret_value=0;          /* Return value */
 
@@ -811,19 +941,27 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5adelete_c
- * Purpose:     Call H5Adelete to delete an attribute
- * Inputs:      obj_id - object identifier
+/****if* H5Af/h5adelete_c
+ * NAME
+ *        h5adelete_c
+ * PURPOSE
+ *     Call H5Adelete to delete an attribute
+ * INPUTS
+ *      obj_id - object identifier
  *              name - name of the attribute
  *              namelen - name length
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, August 12, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5adelete_c (hid_t_f *obj_id, _fcd name, size_t_f *namelen)
+/******/
 {
     char *c_name = NULL;        /* Buffer to hold C string */
     int_f ret_value = 0;        /* Return value */
@@ -848,19 +986,28 @@ done:
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5aopen_idx_c
- * Purpose:     Call H5Aopen_by_idx to open an attribute
- * Inputs:      obj_id - object identifier
+/****if* H5Af/h5aopen_idx_c
+ * NAME
+ *        h5aopen_idx_c
+ * PURPOSE
+ *     Call H5Aopen_by_idx to open an attribute
+ * INPUTS
+ *      obj_id - object identifier
  *              idx    - attribute index ( zero based)
- * Outputs:     attr_id - attribute identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     attr_id - attribute identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, August 12, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5aopen_idx_c (hid_t_f *obj_id, int_f *idx, hid_t_f *attr_id)
+/******/
 {
     int_f ret_value = 0;          /* Return value */
 
@@ -875,18 +1022,27 @@ done:
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5aget_space_c
- * Purpose:     Call H5Aget_space to get attribute's dataspace
- * Inputs:      attr_id - attribute identifier
- * Outputs:     space_id - dataspace identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Af/h5aget_space_c
+ * NAME
+ *        h5aget_space_c
+ * PURPOSE
+ *     Call H5Aget_space to get attribute's dataspace
+ * INPUTS
+ *      attr_id - attribute identifier
+ * OUTPUTS
+ *     space_id - dataspace identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, August 12, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5aget_space_c (hid_t_f *attr_id, hid_t_f *space_id)
+/******/
 {
     int_f ret_value=0;          /* Return value */
 
@@ -900,18 +1056,27 @@ done:
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5aget_type_c
- * Purpose:     Call H5Aget_space to get attribute's datatype
- * Inputs:      attr_id - attribute identifier
- * Outputs:     type_id - datatype identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Af/h5aget_type_c
+ * NAME
+ *        h5aget_type_c
+ * PURPOSE
+ *     Call H5Aget_space to get attribute's datatype
+ * INPUTS
+ *      attr_id - attribute identifier
+ * OUTPUTS
+ *     type_id - datatype identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, August 12, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5aget_type_c (hid_t_f *attr_id, hid_t_f *type_id)
+/******/
 {
     int_f ret_value=0;          /* Return value */
 
@@ -925,19 +1090,27 @@ done:
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5aget_num_attrs_c
- * Purpose:     Call H5Oget_info to determine number of
+/****if* H5Af/h5aget_num_attrs_c
+ * NAME
+ *        h5aget_num_attrs_c
+ * PURPOSE
+ *     Call H5Oget_info to determine number of
  *              attributes of an object
- * Inputs:      obj_id - object identifier
+ * INPUTS
+ *      obj_id - object identifier
  *              attr_num - number of attributes
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, August 12, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5aget_num_attrs_c (hid_t_f *obj_id, int_f *attr_num)
+/******/
 {
     H5O_info_t oinfo;           /* Object info */
     int_f ret_value = 0;        /* Return value */
@@ -955,19 +1128,28 @@ done:
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5aget_name_c
- * Purpose:     Call H5Aget_name to get attribute's name
- * Inputs:      attr_id - attribute identifier
+/****if* H5Af/h5aget_name_c
+ * NAME
+ *        h5aget_name_c
+ * PURPOSE
+ *     Call H5Aget_name to get attribute's name
+ * INPUTS
+ *      attr_id - attribute identifier
  *              bufsize - size of the buffer
- * Outputs:     buf - buffer to hold the name
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     buf - buffer to hold the name
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, August 12, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5aget_name_c(hid_t_f *attr_id, size_t_f *bufsize, _fcd buf)
+/******/
 {
   size_t c_bufsize;
   char *c_buf=NULL;           /* Buffer to hold C string */
@@ -997,19 +1179,28 @@ done:
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5aget_storage_size_c
- * Purpose:     Call H5Aget_storage_size
- * Inputs:      attr_id - identifier of an attribute
- * Outputs:     size    - attributes storage requirements
- * Returns:     0 on success, -1 on failure
- * Programmer:  M. S. Breitenfeld
+/****if* H5Af/h5aget_storage_size_c
+ * NAME
+ *        h5aget_storage_size_c
+ * PURPOSE
+ *     Call H5Aget_storage_size
+ * INPUTS
+ *      attr_id - identifier of an attribute
+ * OUTPUTS
+ *     size    - attributes storage requirements
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              January, 2008
- * Modifications: N/A
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * N/A
+ * SOURCE
+*/
 
 int_f
 nh5aget_storage_size_c ( hid_t_f *attr_id,  hsize_t_f *size)
+/******/
 {
     int_f ret_value=0;          /* Return value */
 
@@ -1020,19 +1211,28 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5aget_create_plist_c
- * Purpose:     Call H5Aget_create_plist
- * Inputs:      attr_id - identifier of an attribute
- * Outputs:     creation_prop_id - Identifier for the attribute’s creation property
- * Returns:     0 on success, -1 on failure
- * Programmer:  M. S. Breitenfeld
+/****if* H5Af/h5aget_create_plist_c
+ * NAME
+ *        h5aget_create_plist_c
+ * PURPOSE
+ *     Call H5Aget_create_plist
+ * INPUTS
+ *      attr_id - identifier of an attribute
+ * OUTPUTS
+ *     creation_prop_id - Identifier for the attribute’s creation property
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              January, 2008
- * Modifications: N/A
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * N/A
+ * SOURCE
+*/
 
 int_f
 nh5aget_create_plist_c ( hid_t_f *attr_id,  hid_t_f *creation_prop_id)
+/******/
 {
     int_f ret_value=0;          /* Return value */
 
@@ -1043,10 +1243,13 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:      h5arename_by_name_c
- * Purpose:   Calls H5Arename_by_name
- * Inputs:    loc_id        - Object identifier
+/****if* H5Af/h5arename_by_name_c
+ * NAME
+ *      h5arename_by_name_c
+ * PURPOSE
+ *   Calls H5Arename_by_name
+ * INPUTS
+ *    loc_id        - Object identifier
  *            obj_name      - Name of object, relative to location,
  *                             whose attribute is to be renamed
  *            obj_name_len      - Object name length
@@ -1055,18 +1258,24 @@ done:
  *            new_attr_name     - New attribute name
  *            new_attr_name_len - New attribute name length
  *            lapl_id       - Link access property list identifier
- * Outputs:     N/A
- * Returns:     0 on success, -1 on failure
- * Programmer:  M. S. Breitenfeld
+ * OUTPUTS
+ *     N/A
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              January, 2008
- * Modifications: N/A
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * N/A
+ * SOURCE
+*/
 
 int_f
 nh5arename_by_name_c( hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen,
 		      _fcd old_attr_name, size_t_f *old_attr_namelen,
 		      _fcd new_attr_name, size_t_f *new_attr_namelen,
 		      hid_t_f *lapl_id )
+/******/
 {
     char *c_obj_name = NULL;          /* Buffer to hold C string */
     char *c_old_attr_name = NULL;     /* Buffer to hold C string */
@@ -1095,21 +1304,30 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5aopen_c
- * Purpose:     Call H5Aopen to open an attribute
- * Inputs:      obj_id       - Identifer for object to which attribute is attached
+/****if* H5Af/h5aopen_c
+ * NAME
+ *        h5aopen_c
+ * PURPOSE
+ *     Call H5Aopen to open an attribute
+ * INPUTS
+ *      obj_id       - Identifer for object to which attribute is attached
  *	        attr_name    - Attribute access property list
  *              attr_namelen - size of attr_name
  *              aapl_id      - Link access property list
- * Outputs:     attr_id - dataset identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * OUTPUTS
+ *     attr_id - dataset identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              January, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5aopen_c (hid_t_f *obj_id, _fcd attr_name, size_t_f *attr_namelen, hid_t_f *aapl_id, hid_t_f *attr_id)
+/******/
 {
     char *c_attr_name = NULL;          /* Buffer to hold C string */
     int_f ret_value = 0;          /* Return value */
@@ -1131,24 +1349,33 @@ done:
         HDfree(c_attr_name);
     return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5adelete_by_name_c
- * Purpose:     Call h5adelete_by_name to remove an attribute from a specified location
- * Inputs:      loc_id - identifer for object to which attribute is attached
+/****if* H5Af/h5adelete_by_name_c
+ * NAME
+ *        h5adelete_by_name_c
+ * PURPOSE
+ *     Call h5adelete_by_name to remove an attribute from a specified location
+ * INPUTS
+ *      loc_id - identifer for object to which attribute is attached
  *              obj_name - object identifier
  *              obj_namelen - name length
  *              attr_name - name of the attribute
  *              attr_namelen - name length
  *              lapl_id - link access property list
  *
- * Outputs:     N/A
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * OUTPUTS
+ *     N/A
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              January, 2008
- * Modifications: N/A
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * N/A
+ * SOURCE
+*/
 int_f
 nh5adelete_by_name_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen, _fcd attr_name, size_t_f *attr_namelen, hid_t_f *lapl_id)
+/******/
 {
     char *c_obj_name = NULL;          /* Buffer to hold C string */
     char *c_attr_name = NULL;         /* Buffer to hold C string */
@@ -1175,25 +1402,34 @@ done:
         HDfree(c_obj_name);
     return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5adelete_by_idx_c
- * Purpose:     Call h5adelete_by_idx
- * Inputs:      loc_id - Location or object identifier; may be dataset or group
+/****if* H5Af/h5adelete_by_idx_c
+ * NAME
+ *        h5adelete_by_idx_c
+ * PURPOSE
+ *     Call h5adelete_by_idx
+ * INPUTS
+ *      loc_id - Location or object identifier; may be dataset or group
  *              obj_name - object identifier
  *              obj_namelen - name length
  *              attr_name - name of the attribute
  *              attr_namelen - name length
  *              lapl_id - link access property list
  *
- * Outputs:     N/A
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * OUTPUTS
+ *     N/A
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              January, 2008
- * Modifications: N/A
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * N/A
+ * SOURCE
+*/
 int_f
 nh5adelete_by_idx_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen,
 		     int_f *idx_type, int_f *order, hsize_t_f *n, hid_t_f *lapl_id)
+/******/
 {
     char *c_obj_name = NULL;          /* Buffer to hold C string */
     int_f ret_value = 0;          /* Return value */
@@ -1216,11 +1452,13 @@ done:
 
     return ret_value;
 }
-
-/*----------------------------------------------------------------------------
- * Name:        h5aget_name_by_idx_c
- * Purpose:     Call h5aget_name_by_idx
- * Inputs:
+/****if* H5Af/h5aget_name_by_idx_c
+ * NAME
+ *        h5aget_name_by_idx_c
+ * PURPOSE
+ *     Call h5aget_name_by_idx
+ * INPUTS
+ *
  *
  *        loc_id - Identifer for object to which attribute is attached
  *      obj_name - Name of object, relative to location,
@@ -1246,17 +1484,23 @@ done:
  *      hdferr   - Error code:
  *                            Returns attribute name size, -1 if fail
  *
- * Outputs:     name - Attribute name
+ * OUTPUTS
+ *     name - Attribute name
  *
- * Returns:     Size of buffer on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     Size of buffer on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              January, 2008
- * Modifications: N/A
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * N/A
+ * SOURCE
+*/
 int_f
 nh5aget_name_by_idx_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen,
 		       int_f *idx_type, int_f *order, hsize_t_f *n, _fcd name,
 		       size_t_f *size, hid_t_f *lapl_id)
+/******/
 {
     char *c_obj_name = NULL;          /* Buffer to hold C string */
     ssize_t c_size;
@@ -1299,10 +1543,13 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5aopen_by_idx_c
- * Purpose:     Call H5Aopen_by_idx
- * Inputs:   loc_id    - Object identifier
+/****if* H5Af/h5aopen_by_idx_c
+ * NAME
+ *        h5aopen_by_idx_c
+ * PURPOSE
+ *     Call H5Aopen_by_idx
+ * INPUTS
+ *   loc_id    - Object identifier
  *            obj_name - Name of object to which attribute is attached
  *         obj_namelen - name length
  *            idx_type - Type of index; Possible values are:
@@ -1321,15 +1568,21 @@ done:
  *                   n - Attribute’s position in index
  *             aapl_id - Attribute access property list
  *             lapl_id - Link access property list
- * Outputs:    attr_id - attribute identifer
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * OUTPUTS
+ *    attr_id - attribute identifer
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              January, 2008
- * Modifications: N/A
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * N/A
+ * SOURCE
+*/
 int_f
 nh5aopen_by_idx_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen,
 		   int_f *idx_type, int_f *order, hsize_t_f *n, hid_t_f *aapl_id, hid_t_f *lapl_id, hid_t_f *attr_id )
+/******/
 {
     char *c_obj_name = NULL;          /* Buffer to hold C string */
     int_f ret_value = 0;          /* Return value */
@@ -1353,24 +1606,33 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5aget_info_c
- * Purpose:     Call H5Aget_info
- * Inputs:     loc_id  - Object identifier
- * Outputs:
+/****if* H5Af/h5aget_info_c
+ * NAME
+ *        h5aget_info_c
+ * PURPOSE
+ *     Call H5Aget_info
+ * INPUTS
+ *     loc_id  - Object identifier
+ * OUTPUTS
+ *
  *        corder_valid - Indicates whether the the creation order data is valid for this attribute
  *              corder - Is a positive integer containing the creation order of the attribute
  *                cset - Indicates the character set used for the attribute’s name
  *           data_size - indicates the size, in the number of characters, of the attribute
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              January, 2008
- * Modifications: N/A
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * N/A
+ * SOURCE
+*/
 int_f
 nh5aget_info_c (hid_t_f *loc_id, int_f *corder_valid, int_f *corder,
 		int_f *cset, hsize_t_f *data_size )
+/******/
 {
 
     int_f ret_value = 0;          /* Return value */
@@ -1396,10 +1658,13 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5aget_info_by_idx_c
- * Purpose:     Call  H5Aget_info_by_idx
- * Inputs:    loc_id  - Object identifier
+/****if* H5Af/h5aget_info_by_idx_c
+ * NAME
+ *        h5aget_info_by_idx_c
+ * PURPOSE
+ *     Call  H5Aget_info_by_idx
+ * INPUTS
+ *    loc_id  - Object identifier
  *            obj_name - Name of object to which attribute is attached
  *         obj_namelen - name length
  *            idx_type - Type of index; Possible values are:
@@ -1417,22 +1682,28 @@ done:
  *
  *                   n - Attribute’s position in index
  *             lapl_id - Link access property list
- * Outputs:
+ * OUTPUTS
+ *
  *        corder_valid - Indicates whether the the creation order data is valid for this attribute
  *              corder - Is a positive integer containing the creation order of the attribute
  *                cset - Indicates the character set used for the attribute’s name
  *           data_size - indicates the size, in the number of characters, of the attribute
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              January, 2008
- * Modifications: N/A
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * N/A
+ * SOURCE
+*/
 int_f
 nh5aget_info_by_idx_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen,
 		int_f *idx_type, int_f *order, hsize_t_f *n, hid_t_f *lapl_id,
 		int_f *corder_valid, int_f *corder,
 		int_f *cset, hsize_t_f *data_size )
+/******/
 {
     char *c_obj_name = NULL;          /* Buffer to hold C string */
     H5A_info_t ainfo;
@@ -1466,31 +1737,40 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5aget_info_by_name_c
- * Purpose:     Call  H5Aget_info_by_name
- * Inputs:      loc_id - Object identifier
+/****if* H5Af/h5aget_info_by_name_c
+ * NAME
+ *        h5aget_info_by_name_c
+ * PURPOSE
+ *     Call  H5Aget_info_by_name
+ * INPUTS
+ *      loc_id - Object identifier
  *            obj_name - Name of object to which attribute is attached
  *         obj_namelen - name length
  *           attr_name - Attribute name
  *        attr_namelen - attribute name length
  *             lapl_id - Link access property list
- * Outputs:
+ * OUTPUTS
+ *
  *        corder_valid - Indicates whether the the creation order data is valid for this attribute
  *              corder - Is a positive integer containing the creation order of the attribute
  *                cset - Indicates the character set used for the attribute’s name
  *           data_size - indicates the size, in the number of characters, of the attribute
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              January, 2008
- * Modifications: N/A
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * N/A
+ * SOURCE
+*/
 int_f
 nh5aget_info_by_name_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen,
 			_fcd attr_name, size_t_f *attr_namelen, hid_t_f *lapl_id,
 			int_f *corder_valid, int_f *corder,
 			int_f *cset, hsize_t_f *data_size )
+/******/
 {
     char *c_obj_name = NULL;          /* Buffer to hold C string */
     char *c_attr_name = NULL;          /* Buffer to hold C string */
@@ -1528,11 +1808,14 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5acreate_by_name_c
- * Purpose:     Call h5acreate_by_name
+/****if* H5Af/h5acreate_by_name_c
+ * NAME
+ *        h5acreate_by_name_c
+ * PURPOSE
+ *     Call h5acreate_by_name
 
- * Inputs:
+ * INPUTS
+ *
  *         loc_id  - Object identifier
  *        obj_name - Name of object to which attribute is attached
  *     obj_namelen - name length
@@ -1544,19 +1827,25 @@ done:
  *         aapl_id - Attribute access property list identifier (Currently not used.)
  *         lapl_id - Link access property list
  *
- * Outputs:
+ * OUTPUTS
+ *
  *            attr - an attribute identifier
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              February, 2008
- * Modifications: N/A
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * N/A
+ * SOURCE
+*/
 int_f
 nh5acreate_by_name_c(hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen,
 		     _fcd attr_name, size_t_f *attr_namelen,  hid_t_f *type_id,
 		     hid_t_f *space_id, hid_t_f *acpl_id, hid_t_f *aapl_id,
 		     hid_t_f *lapl_id, hid_t_f *attr_id )
+/******/
 {
   char *c_obj_name = NULL;      /* Buffer to hold C string */
   char *c_attr_name = NULL;     /* Buffer to hold C string */
@@ -1585,21 +1874,30 @@ done:
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5aexists_c
- * Purpose:     CAll h5aexists
- * Inputs:
+/****if* H5Af/h5aexists_c
+ * NAME
+ *        h5aexists_c
+ * PURPOSE
+ *     CAll h5aexists
+ * INPUTS
+ *
  *             obj_id - Object identifier
  *          attr_name - Attribute name
- * Outputs:
+ * OUTPUTS
+ *
  *     attr_exists_c  - returns a positive value, for TRUE, or 0 (zero), for FALSE.
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              February, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5aexists_c (hid_t_f *obj_id, _fcd name, size_t_f *namelen, hid_t_f *attr_exists)
+/******/
 {
   char *c_name = NULL;          /* Buffer to hold C string */
   int_f ret_value = 0;          /* Return value */
@@ -1622,24 +1920,33 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5aexists_by_name_c
- * Purpose:     CAll H5Aexists_by_name
- * Inputs:
+/****if* H5Af/h5aexists_by_name_c
+ * NAME
+ *        h5aexists_by_name_c
+ * PURPOSE
+ *     CAll H5Aexists_by_name
+ * INPUTS
+ *
  *     loc_id - Location identifier
  *   obj_name - Object name either relative to loc_id, absolute from the file’s root group, or '.' (a dot)
  *  attr_name - Attribute name
  *    lapl_id - Link access property list identifier
- * Outputs:
+ * OUTPUTS
+ *
  *     attr_exists_c  - returns a positive value, for TRUE, or 0 (zero), for FALSE.
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              February, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5aexists_by_name_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen, _fcd attr_name, size_t_f *attr_namelen,
 		      hid_t_f *lapl_id, int_f *attr_exists)
+/******/
 {
   char *c_obj_name = NULL;          /* Buffer to hold object name C string */
   char *c_attr_name = NULL;          /* Buffer to hold attribute name C string */
@@ -1667,25 +1974,34 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5aopen_by_name_c
- * Purpose:     Call H5Aopen_by_name
- * Inputs:
+/****if* H5Af/h5aopen_by_name_c
+ * NAME
+ *        h5aopen_by_name_c
+ * PURPOSE
+ *     Call H5Aopen_by_name
+ * INPUTS
+ *
  *     loc_id - Location identifier
  *   obj_name - Object name either relative to loc_id, absolute from the file’s root group, or '.' (a dot)
  *  attr_name - Attribute name
  *    aapl_id - Attribute access property list (Currently unused; should be passed in as H5P_DEFAULT.)
  *    lapl_id - Link access property list identifier
- * Outputs:
+ * OUTPUTS
+ *
  *     attr_id  - attribute identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              February, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5aopen_by_name_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen, _fcd attr_name, size_t_f *attr_namelen,
 		    hid_t_f *aapl_id, hid_t_f *lapl_id, hid_t_f *attr_id)
+/******/
 {
   char *c_obj_name = NULL;          /* Buffer to hold object name C string */
   char *c_attr_name = NULL;          /* Buffer to hold attribute name C string */
@@ -1713,25 +2029,34 @@ nh5aopen_by_name_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen, _fcd
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:      h5arename_c
- * Purpose:   Calls H5Arename
- * Inputs:    loc_id            - Object identifier
+/****if* H5Af/h5arename_c
+ * NAME
+ *      h5arename_c
+ * PURPOSE
+ *   Calls H5Arename
+ * INPUTS
+ *    loc_id            - Object identifier
  *            old_attr_name     - Prior attribute name
  *            old_attr_name_len - Prior attribute name length
  *            new_attr_name     - New attribute name
  *            new_attr_name_len - New attribute name length
- * Outputs:     N/A
- * Returns:     0 on success, -1 on failure
- * Programmer:  M. S. Breitenfeld
+ * OUTPUTS
+ *     N/A
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              January, 2008
- * Modifications: N/A
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * N/A
+ * SOURCE
+*/
 
 int_f
 nh5arename_c( hid_t_f *loc_id,
 		      _fcd old_attr_name, size_t_f *old_attr_namelen,
 		      _fcd new_attr_name, size_t_f *new_attr_namelen)
+/******/
 {
   char *c_old_attr_name = NULL;     /* Buffer to hold C string */
   char *c_new_attr_name = NULL;     /* Buffer to hold C string */
@@ -1754,3 +2079,69 @@ done:
       HDfree(c_new_attr_name);
     return ret_value;
 }
+/****if* H5Af/h5awrite_f_c
+ * NAME
+ *        h5awrite_f_c
+ * PURPOSE
+ *     Call H5Awrite to write a dataset
+ * INPUTS
+ *      attr_id - Identifier of an attribute to write.
+ *              mem_type_id - Identifier of the attribute datatype (in memory).
+ *              buf      - data pointer buffer
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
+ *              June 11, 2008
+ * HISTORY
+ *
+ *
+ * SOURCE
+*/
+int_f
+nh5awrite_f_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf)
+/******/
+{
+  int ret_value = -1;
+  herr_t ret;
+
+  ret = H5Awrite( (hid_t)*attr_id, (hid_t)*mem_type_id, buf);
+
+  if (ret < 0) return ret_value;
+  ret_value = 0;
+  return ret_value;
+}
+
+/****if* H5Af/h5aread_f_c
+ * NAME
+ *        h5aread_f_c
+ * PURPOSE
+ *     Call H5Awrite to write a dataset
+ * INPUTS
+ *      attr_id - Identifier of an attribute to write.
+ *              mem_type_id - Identifier of the attribute datatype (in memory).
+ *              buf      - data pointer buffer
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
+ *              June 11, 2008
+ * HISTORY
+ *
+ *
+ * SOURCE
+*/
+int_f
+nh5aread_f_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf)
+/******/
+{
+  int ret_value = -1;
+  herr_t ret;
+
+  ret = H5Aread( (hid_t)*attr_id, (hid_t)*mem_type_id, buf);
+
+  if (ret < 0) return ret_value;
+  ret_value = 0;
+  return ret_value;
+}
+
diff --git a/fortran/src/H5Aff.f90 b/fortran/src/H5Aff.f90
index 49f3e70..1926dd1 100644
--- a/fortran/src/H5Aff.f90
+++ b/fortran/src/H5Aff.f90
@@ -1,3 +1,15 @@
+!****h* ROBODoc/H5A
+!
+! NAME
+!  MODULE H5A
+!
+! PURPOSE
+!  This file contains Fortran interfaces for H5A functions. It includes
+!  all the functions that are independent on whether the Fortran 2003 functions
+!  are enabled or disabled.
+!
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,129 +25,77 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
+! NOTES
+!                         *** IMPORTANT ***
+!  If you add a new H5A function 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.
 !
-! This file contains Fortran90 interfaces for H5A functions.
-!
+!*****
+
 MODULE H5A
 
   USE H5GLOBAL
 !
-!On Windows there are no big (integer*8) integers, so overloading
-!for bug #670 does not work. I have to use DEC compilation directives to make
-!Windows DEC Visual Fortran and OSF compilers happy and do right things.
-!						05/01/02 EP
-!
-  INTERFACE h5awrite_f
-
-     MODULE PROCEDURE h5awrite_integer_scalar
-     MODULE PROCEDURE h5awrite_integer_1
-     MODULE PROCEDURE h5awrite_integer_2
-     MODULE PROCEDURE h5awrite_integer_3
-     MODULE PROCEDURE h5awrite_integer_4
-     MODULE PROCEDURE h5awrite_integer_5
-     MODULE PROCEDURE h5awrite_integer_6
-     MODULE PROCEDURE h5awrite_integer_7
-     MODULE PROCEDURE h5awrite_char_scalar
-     MODULE PROCEDURE h5awrite_char_1
-     MODULE PROCEDURE h5awrite_char_2
-     MODULE PROCEDURE h5awrite_char_3
-     MODULE PROCEDURE h5awrite_char_4
-     MODULE PROCEDURE h5awrite_char_5
-     MODULE PROCEDURE h5awrite_char_6
-     MODULE PROCEDURE h5awrite_char_7
-     MODULE PROCEDURE h5awrite_real_scalar
-     MODULE PROCEDURE h5awrite_real_1
-     MODULE PROCEDURE h5awrite_real_2
-     MODULE PROCEDURE h5awrite_real_3
-     MODULE PROCEDURE h5awrite_real_4
-     MODULE PROCEDURE h5awrite_real_5
-     MODULE PROCEDURE h5awrite_real_6
-     MODULE PROCEDURE h5awrite_real_7
-
-  END INTERFACE
-
-  INTERFACE h5aread_f
-
-     MODULE PROCEDURE h5aread_integer_scalar
-     MODULE PROCEDURE h5aread_integer_1
-     MODULE PROCEDURE h5aread_integer_2
-     MODULE PROCEDURE h5aread_integer_3
-     MODULE PROCEDURE h5aread_integer_4
-     MODULE PROCEDURE h5aread_integer_5
-     MODULE PROCEDURE h5aread_integer_6
-     MODULE PROCEDURE h5aread_integer_7
-     MODULE PROCEDURE h5aread_char_scalar
-     MODULE PROCEDURE h5aread_char_1
-     MODULE PROCEDURE h5aread_char_2
-     MODULE PROCEDURE h5aread_char_3
-     MODULE PROCEDURE h5aread_char_4
-     MODULE PROCEDURE h5aread_char_5
-     MODULE PROCEDURE h5aread_char_6
-     MODULE PROCEDURE h5aread_char_7
-     MODULE PROCEDURE h5aread_real_scalar
-     MODULE PROCEDURE h5aread_real_1
-     MODULE PROCEDURE h5aread_real_2
-     MODULE PROCEDURE h5aread_real_3
-     MODULE PROCEDURE h5aread_real_4
-     MODULE PROCEDURE h5aread_real_5
-     MODULE PROCEDURE h5aread_real_6
-     MODULE PROCEDURE h5aread_real_7
-
-  END INTERFACE
+!  On Windows there are no big (integer*8) integers, so overloading
+!  for bug #670 does not work. I have to use DEC compilation directives to make
+!  Windows DEC Visual Fortran and OSF compilers happy and do right things.
+!  05/01/02 EP
+!
 
 CONTAINS
 
-!----------------------------------------------------------------------
-! Name:		h5acreate_f
 !
-! Purpose: 	Creates a dataset as an attribute of a group, dataset,
-!		or named datatype
+!****s* H5A/h5acreate_f
+!
+! NAME
+!  h5acreate_f
+!
+! PURPOSE
+!  Creates a dataset as an attribute of a group, dataset, or named datatype
+!
+! INPUTS
+!  loc_id 	 - identifier of an object (group, dataset,
+!                  or named datatype) attribute is attached to
+!  name 	 - attribute name
+!  type_id 	 - attribute datatype identifier
+!  space_id 	 - attribute dataspace identifier
 !
-! Inputs:
-!		loc_id		- identifier of an object (group, dataset,
-!				  or named datatype) attribute is attached to
-!		name		- attribute name
-!		type_id		- attribute datatype identifier
-!		space_id	- attribute dataspace identifier
+! OUTPUTS
+!  attr_id 	 - attribute identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  acpl_id 	 - Attribute creation property list identifier
+!  appl_id 	 - Attribute access property list identifier
 !
-! Outputs:
-!		attr_id		- attribute identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!		acpl_id	- Attribute creation property list identifier
-!               appl_id - Attribute access property list identifier
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! HISTORY
+!  Explicit Fortran interfaces are added for
+!  called C functions (it is needed for Windows
+!  port).  February 27, 2001
 !
-! Modifications: 	Explicit Fortran interfaces are added for
-!			called C functions (it is needed for Windows
-!			port).  February 27, 2001
 !
-!----------------------------------------------------------------------
+! SOURCE
   SUBROUTINE h5acreate_f(loc_id, name, type_id, space_id, attr_id, &
                                  hdferr, acpl_id, aapl_id )
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: loc_id    ! Object identifier
-    CHARACTER(LEN=*), INTENT(IN) :: name    ! Attribute name
-    INTEGER(HID_T), INTENT(IN) :: type_id
-    ! Attribute datatype identifier
-    INTEGER(HID_T), INTENT(IN) :: space_id
-    ! Attribute dataspace identifier
-    INTEGER(HID_T), INTENT(OUT) :: attr_id  ! Attribute identifier
-    INTEGER, INTENT(OUT) :: hdferr       ! Error code:
-                                         ! 0 on success and -1 on failure
+    INTEGER(HID_T), INTENT(IN) :: loc_id   ! Object identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name   ! Attribute name
+    INTEGER(HID_T), INTENT(IN) :: type_id  ! Attribute datatype identifier
+    INTEGER(HID_T), INTENT(IN) :: space_id ! Attribute dataspace identifier
+    INTEGER(HID_T), INTENT(OUT) :: attr_id ! Attribute identifier
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code:
+                                           ! 0 on success and -1 on failure
+!*****
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: acpl_id ! Attribute creation property list identifier
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: aapl_id ! Attribute access property list identifier
 
     INTEGER(HID_T) :: acpl_id_default
     INTEGER(HID_T) :: aapl_id_default
     INTEGER(SIZE_T) :: namelen
-!            INTEGER, EXTERNAL :: h5acreate_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5acreate_c(loc_id, name, namelen, type_id, &
             space_id, acpl_id_default, aapl_id_default, attr_id)
@@ -157,7 +117,7 @@ CONTAINS
 
     acpl_id_default = H5P_DEFAULT_F
     aapl_id_default = H5P_DEFAULT_F
-    namelen = LEN(NAME)
+    namelen = LEN(name)
     IF (PRESENT(acpl_id)) acpl_id_default = acpl_id
     IF (PRESENT(aapl_id)) aapl_id_default = aapl_id
 
@@ -167,43 +127,42 @@ CONTAINS
   END SUBROUTINE h5acreate_f
 
 
-!----------------------------------------------------------------------
-! Name:		h5aopen_name_f
 !
-! Purpose:  	Opens an attribute specified by name.
+!****s* H5A/h5aopen_name_f
 !
-! Inputs:
-!		obj_id 		- identifier of a group, dataset, or named
-!				  datatype atttribute to be attached to
-!		name		- attribute name
-! Outputs:
-!		attr_id		- attribute identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5aopen_name_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Opens an attribute specified by name.
 !
-! Modifications: 	Explicit Fortran interfaces are added for
-!			called C functions (it is needed for Windows
-!			port).  February 27, 2001
+! INPUTS
+!  obj_id 	 - identifier of a group, dataset, or named
+!                  datatype atttribute to be attached to
+!  name 	 - attribute name
+! OUTPUTS
+!  attr_id 	 - attribute identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-!----------------------------------------------------------------------
-
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces are added for
+!  called C functions (it is needed for Windows
+!  port).  February 27, 2001
+!
+! SOURCE
   SUBROUTINE h5aopen_name_f(obj_id, name, attr_id, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: obj_id    ! Object identifier
     CHARACTER(LEN=*), INTENT(IN) :: name    ! Attribute name
     INTEGER(HID_T), INTENT(OUT) :: attr_id  ! Attribute identifier
     INTEGER, INTENT(OUT) :: hdferr          ! Error code
+!*****
     INTEGER(SIZE_T) :: namelen
 
-!            INTEGER, EXTERNAL :: h5aopen_name_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5aopen_name_c(obj_id, name, namelen, attr_id)
          USE H5GLOBAL
@@ -221,44 +180,41 @@ CONTAINS
     namelen = LEN(name)
     hdferr = h5aopen_name_c(obj_id, name, namelen, attr_id)
   END SUBROUTINE h5aopen_name_f
-
-
-!----------------------------------------------------------------------
-! Name:		h5aopen_idx_f
 !
-! Purpose:  	Opens the attribute specified by its index.
+!****s* H5A/h5aopen_idx_f
 !
-! Inputs:
-!		obj_id		- identifier of a group, dataset, or named
-!				  datatype an attribute to be attached to
-!		index		- index of the attribute to open (zero-based)
-! Outputs:
-!		attr_id		- attribute identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5aopen_idx_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Opens the attribute specified by its index.
 !
-! Modifications: 	Explicit Fortran interfaces are added for
-!			called C functions (it is needed for Windows
-!			port).  February 27, 2001
+! INPUTS
+!  obj_id 	 - identifier of a group, dataset, or named
+!                  datatype an attribute to be attached to
+!  index 	 - index of the attribute to open (zero-based)
+! OUTPUTS
+!  attr_id 	 - attribute identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-!----------------------------------------------------------------------
-
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces are added for
+!  called C functions (it is needed for Windows
+!  port).  February 27, 2001
+!
+! SOURCE
   SUBROUTINE h5aopen_idx_f(obj_id, index, attr_id, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: obj_id    ! Object identifier
     INTEGER, INTENT(IN) :: index            ! Attribute index
     INTEGER(HID_T), INTENT(OUT) :: attr_id  ! Attribute identifier
     INTEGER, INTENT(OUT) :: hdferr          ! Error code
+!*****
 
-!            INTEGER, EXTERNAL :: h5aopen_idx_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5aopen_idx_c(obj_id, index, attr_id)
          USE H5GLOBAL
@@ -273,1686 +229,131 @@ CONTAINS
 
     hdferr = h5aopen_idx_c(obj_id, index, attr_id)
   END SUBROUTINE h5aopen_idx_f
-
-
-  SUBROUTINE h5awrite_integer_scalar(attr_id, memtype_id,  buf, dims, hdferr)
-    IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-    ! identifier  (in memory)
-    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-    INTEGER, INTENT(IN) :: buf              ! Attribute data
-    INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awrite_integer_s_c
-!  MS FORTRAN needs explicit interface for C functions called here.
 !
-    INTERFACE
-       INTEGER FUNCTION h5awrite_integer_s_c(attr_id, memtype_id,  buf, dims)
-         USE H5GLOBAL
-         !DEC$IF DEFINED(HDF5F90_WINDOWS)
-         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_S_C'::h5awrite_integer_s_c
-         !DEC$ENDIF
-         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-         INTEGER(HID_T), INTENT(IN) :: attr_id
-         INTEGER(HID_T), INTENT(IN) :: memtype_id
-         INTEGER, INTENT(IN)::buf
-       END FUNCTION h5awrite_integer_s_c
-    END INTERFACE
-
-    hdferr = h5awrite_integer_s_c(attr_id, memtype_id,  buf, dims)
-  END SUBROUTINE h5awrite_integer_scalar
-
-  SUBROUTINE h5awrite_integer_1(attr_id, memtype_id,  buf, dims, hdferr)
-    IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-    ! identifier  (in memory)
-    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-    INTEGER, INTENT(IN) , &
-         DIMENSION(dims(1)) :: buf
-    ! Attribute data
-    INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awrite_integer_1_c
-!  MS FORTRAN needs explicit interface for C functions called here.
+!****s* H5A/h5aget_space_f
 !
-    INTERFACE
-       INTEGER FUNCTION h5awrite_integer_1_c(attr_id, memtype_id,  buf, dims)
-         USE H5GLOBAL
-         !DEC$IF DEFINED(HDF5F90_WINDOWS)
-         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_1_C'::h5awrite_integer_1_c
-         !DEC$ENDIF
-         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-         INTEGER(HID_T), INTENT(IN) :: attr_id
-         INTEGER(HID_T), INTENT(IN) :: memtype_id
-         INTEGER, INTENT(IN), DIMENSION(dims(1)) :: buf
-       END FUNCTION h5awrite_integer_1_c
-    END INTERFACE
-
-    hdferr = h5awrite_integer_1_c(attr_id, memtype_id,  buf, dims)
-
-  END SUBROUTINE h5awrite_integer_1
-
-
-  SUBROUTINE h5awrite_integer_2(attr_id, memtype_id,  buf, dims, hdferr)
-    IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-    ! identifier  (in memory)
-    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-    INTEGER, INTENT(IN) , &
-         DIMENSION(dims(1),dims(2)) :: buf
-    ! Attribute data
-    INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awrite_integer_2_c
-!  MS FORTRAN needs explicit interface for C functions called here.
+! NAME
+!  h5aget_space_f
 !
-    INTERFACE
-       INTEGER FUNCTION h5awrite_integer_2_c(attr_id, memtype_id,  buf, dims)
-         USE H5GLOBAL
-         !DEC$IF DEFINED(HDF5F90_WINDOWS)
-         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_2_C'::h5awrite_integer_2_c
-         !DEC$ENDIF
-         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-         INTEGER(HID_T), INTENT(IN) :: attr_id
-         INTEGER(HID_T), INTENT(IN) :: memtype_id
-         INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2)) :: buf
-       END FUNCTION h5awrite_integer_2_c
-    END INTERFACE
-
-    hdferr = h5awrite_integer_2_c(attr_id, memtype_id,  buf, dims)
-  END SUBROUTINE h5awrite_integer_2
-
-
-  SUBROUTINE h5awrite_integer_3(attr_id, memtype_id,  buf, dims, hdferr)
-    IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-    ! identifier  (in memory)
-    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-    INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2),dims(3)) :: buf
-                                                    ! Attribute data
-    INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awrite_integer_3_c
-!  MS FORTRAN needs explicit interface for C functions called here.
+! PURPOSE
+!  Gets a copy of the dataspace for an attribute.
 !
-    INTERFACE
-       INTEGER FUNCTION h5awrite_integer_3_c(attr_id, memtype_id,  buf, dims)
-         USE H5GLOBAL
-         !DEC$IF DEFINED(HDF5F90_WINDOWS)
-         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_3_C'::h5awrite_integer_3_c
-         !DEC$ENDIF
-         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-         INTEGER(HID_T), INTENT(IN) :: attr_id
-         INTEGER(HID_T), INTENT(IN) :: memtype_id
-         INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2),dims(3)) :: buf
-       END FUNCTION h5awrite_integer_3_c
-    END INTERFACE
-
-    hdferr = h5awrite_integer_3_c(attr_id, memtype_id,  buf, dims)
-  END SUBROUTINE h5awrite_integer_3
-
-
-  SUBROUTINE h5awrite_integer_4(attr_id, memtype_id,  buf, dims, hdferr)
-    IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-    ! identifier  (in memory)
-    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-    INTEGER, INTENT(IN), &
-         DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-    ! Attribute data
-    INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awrite_integer_4_c
-!  MS FORTRAN needs explicit interface for C functions called here.
+! INPUTS
+!  attr_id 	 - attribute identifier
 !
-    INTERFACE
-       INTEGER FUNCTION h5awrite_integer_4_c(attr_id, memtype_id,  buf, dims)
-         USE H5GLOBAL
-         !DEC$IF DEFINED(HDF5F90_WINDOWS)
-         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_4_C'::h5awrite_integer_4_c
-         !DEC$ENDIF
-         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-         INTEGER(HID_T), INTENT(IN) :: attr_id
-         INTEGER(HID_T), INTENT(IN) :: memtype_id
-         INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-       END FUNCTION h5awrite_integer_4_c
-    END INTERFACE
-
-    hdferr = h5awrite_integer_4_c(attr_id, memtype_id,  buf, dims)
-  END SUBROUTINE h5awrite_integer_4
-
-
-  SUBROUTINE h5awrite_integer_5(attr_id, memtype_id,  buf, dims, hdferr)
-    IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-    ! identifier  (in memory)
-    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-    INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-                                                    ! Attribute data
-    INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awrite_integer_5_c
-!  MS FORTRAN needs explicit interface for C functions called here.
+! OUTPUTS
+!  space_id 	 - attribite dataspace identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-    INTERFACE
-       INTEGER FUNCTION h5awrite_integer_5_c(attr_id, memtype_id,  buf, dims)
-         USE H5GLOBAL
-         !DEC$IF DEFINED(HDF5F90_WINDOWS)
-         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_5_C'::h5awrite_integer_5_c
-         !DEC$ENDIF
-         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-         INTEGER(HID_T), INTENT(IN) :: attr_id
-         INTEGER(HID_T), INTENT(IN) :: memtype_id
-         INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-       END FUNCTION h5awrite_integer_5_c
-    END INTERFACE
-
-    hdferr = h5awrite_integer_5_c(attr_id, memtype_id,  buf, dims)
-  END SUBROUTINE h5awrite_integer_5
-
-
-  SUBROUTINE h5awrite_integer_6(attr_id, memtype_id,  buf, dims, hdferr)
-    IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-    ! identifier  (in memory)
-    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-    INTEGER, INTENT(IN), &
-         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-    ! Attribute data
-    INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awrite_integer_6_c
-!  MS FORTRAN needs explicit interface for C functions called here.
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-    INTERFACE
-       INTEGER FUNCTION h5awrite_integer_6_c(attr_id, memtype_id,  buf, dims)
-         USE H5GLOBAL
-         !DEC$IF DEFINED(HDF5F90_WINDOWS)
-         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_6_C'::h5awrite_integer_6_c
-         !DEC$ENDIF
-         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-         INTEGER(HID_T), INTENT(IN) :: attr_id
-         INTEGER(HID_T), INTENT(IN) :: memtype_id
-         INTEGER, INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-       END FUNCTION h5awrite_integer_6_c
-    END INTERFACE
-
-    hdferr = h5awrite_integer_6_c(attr_id, memtype_id,  buf, dims)
-  END SUBROUTINE h5awrite_integer_6
-
-
-  SUBROUTINE h5awrite_integer_7(attr_id, memtype_id,  buf, dims, hdferr)
-    IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-    ! identifier  (in memory)
-    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-    INTEGER, INTENT(IN), &
-         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-    ! Attribute data
-    INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awrite_integer_7_c
-!  MS FORTRAN needs explicit interface for C functions called here.
+! HISTORY
+!  Explicit Fortran interfaces are added for
+!  called C functions (it is needed for Windows
+!  port).  February 27, 2001
 !
-    INTERFACE
-       INTEGER FUNCTION h5awrite_integer_7_c(attr_id, memtype_id,  buf, dims)
-         USE H5GLOBAL
-         !DEC$IF DEFINED(HDF5F90_WINDOWS)
-         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_7_C'::h5awrite_integer_7_c
-         !DEC$ENDIF
-         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-         INTEGER(HID_T), INTENT(IN) :: attr_id
-         INTEGER(HID_T), INTENT(IN) :: memtype_id
-         INTEGER, INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-       END FUNCTION h5awrite_integer_7_c
-    END INTERFACE
-
-    hdferr = h5awrite_integer_7_c(attr_id, memtype_id,  buf, dims)
-  END SUBROUTINE h5awrite_integer_7
-
-
-  SUBROUTINE h5awrite_real_scalar(attr_id, memtype_id,  buf, dims, hdferr)
+!
+! SOURCE
+  SUBROUTINE h5aget_space_f(attr_id, space_id, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-    ! identifier  (in memory)
-    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-    REAL, INTENT(IN) :: buf                 ! Attribute data
+    INTEGER(HID_T), INTENT(OUT) :: space_id ! Attribute dataspace identifier
     INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awrite_real_s_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
     INTERFACE
-       INTEGER FUNCTION h5awrite_real_s_c(attr_id, memtype_id,  buf, dims)
+       INTEGER FUNCTION h5aget_space_c(attr_id, space_id)
          USE H5GLOBAL
          !DEC$IF DEFINED(HDF5F90_WINDOWS)
-         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_S_C'::h5awrite_real_s_c
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AGET_SPACE_C'::h5aget_space_c
          !DEC$ENDIF
-         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
          INTEGER(HID_T), INTENT(IN) :: attr_id
-         INTEGER(HID_T), INTENT(IN) :: memtype_id
-         REAL, INTENT(IN)::buf
-       END FUNCTION h5awrite_real_s_c
+         INTEGER(HID_T), INTENT(OUT) :: space_id
+       END FUNCTION h5aget_space_c
     END INTERFACE
-
-    hdferr = h5awrite_real_s_c(attr_id, memtype_id,  buf, dims)
-  END SUBROUTINE h5awrite_real_scalar
-
-  SUBROUTINE h5awrite_real_1(attr_id, memtype_id,  buf, dims, hdferr)
-    IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-    ! identifier  (in memory)
-    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-    REAL, INTENT(IN), &
-         DIMENSION(dims(1)) :: buf
-                                                    ! Attribute data
-    INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awrite_real_1_c
-!  MS FORTRAN needs explicit interface for C functions called here.
+    
+    hdferr = h5aget_space_c(attr_id, space_id)
+  END SUBROUTINE h5aget_space_f
+!
+!****s* H5A/h5aget_type_f
+!
+! NAME
+!  h5aget_type_f
+!
+! PURPOSE
+!  Gets an attribute datatype.
 !
+! INPUTS
+!  attr_id 	 - attribute identifier
+! OUTPUTS
+!  type_id 	 - attribute datatype identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces are added for
+!  called C functions (it is needed for Windows
+!  port).  February 27, 2001
+!
+! SOURCE
+  SUBROUTINE h5aget_type_f(attr_id, type_id, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id  ! Attribute identifier
+    INTEGER(HID_T), INTENT(OUT) :: type_id ! Attribute datatype identifier
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+!*****
     INTERFACE
-       INTEGER FUNCTION h5awrite_real_1_c(attr_id, memtype_id,  buf, dims)
+       INTEGER FUNCTION h5aget_type_c(attr_id, type_id)
          USE H5GLOBAL
          !DEC$IF DEFINED(HDF5F90_WINDOWS)
-         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_1_C'::h5awrite_real_1_c
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AGET_TYPE_C'::h5aget_type_c
          !DEC$ENDIF
-         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
          INTEGER(HID_T), INTENT(IN) :: attr_id
-         INTEGER(HID_T), INTENT(IN) :: memtype_id
-         REAL, INTENT(IN), &
-              DIMENSION(dims(1)) :: buf
-       END FUNCTION h5awrite_real_1_c
+         INTEGER(HID_T), INTENT(OUT) :: type_id
+       END FUNCTION h5aget_type_c
     END INTERFACE
-
-    hdferr = h5awrite_real_1_c(attr_id, memtype_id,  buf, dims)
-  END SUBROUTINE h5awrite_real_1
-
-
-          SUBROUTINE h5awrite_real_2(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            REAL, INTENT(IN), &
-            DIMENSION(dims(1),dims(2)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awrite_real_2_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5awrite_real_2_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_2_C'::h5awrite_real_2_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              REAL, INTENT(IN), &
-              DIMENSION(dims(1),dims(2)) :: buf
-              END FUNCTION h5awrite_real_2_c
-            END INTERFACE
-
-            hdferr = h5awrite_real_2_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5awrite_real_2
-
-
-          SUBROUTINE h5awrite_real_3(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            REAL, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awrite_real_3_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5awrite_real_3_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_3_C'::h5awrite_real_3_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              REAL, INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3)) :: buf
-              END FUNCTION h5awrite_real_3_c
-            END INTERFACE
-
-            hdferr = h5awrite_real_3_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5awrite_real_3
-
-
-          SUBROUTINE h5awrite_real_4(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            REAL, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awrite_real_4_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5awrite_real_4_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_4_C'::h5awrite_real_4_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              REAL, INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-              END FUNCTION h5awrite_real_4_c
-            END INTERFACE
-
-            hdferr = h5awrite_real_4_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5awrite_real_4
-
-
-          SUBROUTINE h5awrite_real_5(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            REAL, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awrite_real_5_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5awrite_real_5_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_5_C'::h5awrite_real_5_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              REAL, INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-              END FUNCTION h5awrite_real_5_c
-            END INTERFACE
-
-            hdferr = h5awrite_real_5_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5awrite_real_5
-
-
-          SUBROUTINE h5awrite_real_6(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            REAL, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awrite_real_6_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5awrite_real_6_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_6_C'::h5awrite_real_6_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              REAL, INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-              END FUNCTION h5awrite_real_6_c
-            END INTERFACE
-
-            hdferr = h5awrite_real_6_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5awrite_real_6
-
-
-          SUBROUTINE h5awrite_real_7(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            REAL, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awrite_real_7_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5awrite_real_7_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_7_C'::h5awrite_real_7_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              REAL, INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-              END FUNCTION h5awrite_real_7_c
-            END INTERFACE
-
-            hdferr = h5awrite_real_7_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5awrite_real_7
-
-
-          SUBROUTINE h5awrite_char_scalar(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            CHARACTER(LEN=*),INTENT(IN) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-!            INTEGER, EXTERNAL :: h5awritec_s_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5awritec_s_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITEC_S_C'::h5awritec_s_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              CHARACTER(LEN=*), INTENT(IN)::buf
-              END FUNCTION h5awritec_s_c
-            END INTERFACE
-
-            hdferr = h5awritec_s_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5awrite_char_scalar
-
-          SUBROUTINE h5awrite_char_1(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            CHARACTER(LEN=*), INTENT(IN), &
-            DIMENSION(dims(1)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-!            INTEGER, EXTERNAL :: h5awritec_1_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5awritec_1_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITEC_1_C'::h5awritec_1_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              CHARACTER(LEN=*), INTENT(IN), DIMENSION(dims(1))::buf
-              END FUNCTION h5awritec_1_c
-            END INTERFACE
-
-            hdferr = h5awritec_1_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5awrite_char_1
-
-
-          SUBROUTINE h5awrite_char_2(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            CHARACTER(LEN=*), INTENT(IN), &
-            DIMENSION(dims(1),dims(2)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awritec_2_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5awritec_2_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITEC_2_C'::h5awritec_2_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              CHARACTER(LEN=*), INTENT(IN), &
-              DIMENSION(dims(1),dims(2)) :: buf
-              END FUNCTION h5awritec_2_c
-            END INTERFACE
-
-            hdferr = h5awritec_2_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5awrite_char_2
-
-
-          SUBROUTINE h5awrite_char_3(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            CHARACTER(LEN=*), INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-!            INTEGER, EXTERNAL :: h5awritec_3_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5awritec_3_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITEC_3_C'::h5awritec_3_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              CHARACTER(LEN=*), INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3)) :: buf
-              END FUNCTION h5awritec_3_c
-            END INTERFACE
-
-            hdferr = h5awritec_3_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5awrite_char_3
-
-
-          SUBROUTINE h5awrite_char_4(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            CHARACTER(LEN=*), INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-!            INTEGER, EXTERNAL :: h5awritec_4_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5awritec_4_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITEC_4_C'::h5awritec_4_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              CHARACTER(LEN=*), INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-              END FUNCTION h5awritec_4_c
-            END INTERFACE
-
-            hdferr = h5awritec_4_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5awrite_char_4
-
-
-          SUBROUTINE h5awrite_char_5(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            CHARACTER(LEN=*), INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-!            INTEGER, EXTERNAL :: h5awritec_5_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5awritec_5_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITEC_5_C'::h5awritec_5_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              CHARACTER(LEN=*), INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-              END FUNCTION h5awritec_5_c
-            END INTERFACE
-
-            hdferr = h5awritec_5_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5awrite_char_5
-
-
-          SUBROUTINE h5awrite_char_6(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            CHARACTER(LEN=*), INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-!            INTEGER, EXTERNAL :: h5awritec_6_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5awritec_6_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITEC_6_C'::h5awritec_6_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              CHARACTER(LEN=*), INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-              END FUNCTION h5awritec_6_c
-            END INTERFACE
-
-            hdferr = h5awritec_6_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5awrite_char_6
-
-
-          SUBROUTINE h5awrite_char_7(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            CHARACTER(LEN=*), INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-!            INTEGER, EXTERNAL :: h5awritec_7_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5awritec_7_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITEC_7_C'::h5awritec_7_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              CHARACTER(LEN=*), INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-              END FUNCTION h5awritec_7_c
-            END INTERFACE
-
-            hdferr = h5awritec_7_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5awrite_char_7
-
-!----------------------------------------------------------------------
-! Name:		h5aread_f
-!
-! Purpose:  	Reads an attribute.
-!
-! Inputs:
-!		attr_id		- attribute identifier
-!		memtype_id	- attribute memory type identifier
-!		dims		- 1D array of size 7, stores sizes of the
-!				- buf array dimensions.
-! Outputs:
-!		buf		- buffer to read attribute data in
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces are added for
-!			called C functions (it is needed for Windows
-!			port).  February 27, 2001
-!
-!			dims parameter was added to make code portable;
-!			Aprile 4, 2001
-!
-!                       Changed buf intent to INOUT to be consistant
-!                       with how the C functions handles it. The pg
-!                       compiler will return 0 if a buf value is not set.
-!                       February, 2008
-!
-! Comment:		This function is overloaded to write INTEGER,
-!			REAL, DOUBLE PRECISION and CHARACTER buffers
-!			up to 7 dimensions.
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5aread_integer_scalar(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            INTEGER, INTENT(INOUT) :: buf             ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5aread_integer_s_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aread_integer_s_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_S_C'::h5aread_integer_s_c
-              !DEC$ENDIF
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              INTEGER, INTENT(INOUT)::buf
-              END FUNCTION h5aread_integer_s_c
-            END INTERFACE
-            hdferr = h5aread_integer_s_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_integer_scalar
-
-          SUBROUTINE h5aread_integer_1(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            INTEGER, INTENT(INOUT), DIMENSION(dims(1)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5aread_integer_1_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aread_integer_1_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_1_C'::h5aread_integer_1_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              INTEGER, INTENT(INOUT), DIMENSION(dims(1)) :: buf
-              END FUNCTION h5aread_integer_1_c
-            END INTERFACE
-
-            hdferr = h5aread_integer_1_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_integer_1
-
-
-          SUBROUTINE h5aread_integer_2(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            INTEGER, INTENT(INOUT),DIMENSION(dims(1),dims(2)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5aread_integer_2_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aread_integer_2_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_2_C'::h5aread_integer_2_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              INTEGER, INTENT(INOUT), DIMENSION(dims(1),dims(2)) :: buf
-              END FUNCTION h5aread_integer_2_c
-            END INTERFACE
-
-            hdferr = h5aread_integer_2_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_integer_2
-
-
-          SUBROUTINE h5aread_integer_3(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            INTEGER, INTENT(INOUT), &
-                 DIMENSION(dims(1),dims(2),dims(3)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5aread_integer_3_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aread_integer_3_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_3_C'::h5aread_integer_3_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              INTEGER, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3)) :: buf
-              END FUNCTION h5aread_integer_3_c
-            END INTERFACE
-
-            hdferr = h5aread_integer_3_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_integer_3
-
-
-          SUBROUTINE h5aread_integer_4(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            INTEGER, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5aread_integer_4_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aread_integer_4_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_4_C'::h5aread_integer_4_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              INTEGER, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-              END FUNCTION h5aread_integer_4_c
-            END INTERFACE
-
-            hdferr = h5aread_integer_4_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_integer_4
-
-
-          SUBROUTINE h5aread_integer_5(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            INTEGER, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5aread_integer_5_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aread_integer_5_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_5_C'::h5aread_integer_5_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              INTEGER, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-              END FUNCTION h5aread_integer_5_c
-            END INTERFACE
-
-            hdferr = h5aread_integer_5_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_integer_5
-
-
-          SUBROUTINE h5aread_integer_6(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            INTEGER, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5aread_integer_6_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aread_integer_6_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_6_C'::h5aread_integer_6_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              INTEGER, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-              END FUNCTION h5aread_integer_6_c
-            END INTERFACE
-
-            hdferr = h5aread_integer_6_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_integer_6
-
-
-          SUBROUTINE h5aread_integer_7(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            INTEGER, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5aread_integer_7_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aread_integer_7_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_7_C'::h5aread_integer_7_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              INTEGER, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-              END FUNCTION h5aread_integer_7_c
-            END INTERFACE
-
-            hdferr = h5aread_integer_7_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_integer_7
-
-
-          SUBROUTINE h5aread_real_scalar(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            REAL, INTENT(INOUT) :: buf                ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5aread_real_s_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aread_real_s_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_REAL_S_C'::h5aread_real_s_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              REAL, INTENT(INOUT)::buf
-              END FUNCTION h5aread_real_s_c
-            END INTERFACE
-
-            hdferr = h5aread_real_s_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_real_scalar
-
-          SUBROUTINE h5aread_real_1(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            REAL, INTENT(INOUT), &
-            DIMENSION(dims(1)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5aread_real_1_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aread_real_1_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_REAL_1_C'::h5aread_real_1_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              REAL, INTENT(INOUT), &
-              DIMENSION(dims(1)) :: buf
-              END FUNCTION h5aread_real_1_c
-            END INTERFACE
-
-            hdferr = h5aread_real_1_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_real_1
-
-
-          SUBROUTINE h5aread_real_2(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            REAL, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5aread_real_2_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aread_real_2_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_REAL_2_C'::h5aread_real_2_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              REAL, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2)) :: buf
-              END FUNCTION h5aread_real_2_c
-            END INTERFACE
-
-            hdferr = h5aread_real_2_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_real_2
-
-
-          SUBROUTINE h5aread_real_3(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            REAL, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5aread_real_3_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aread_real_3_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_REAL_3_C'::h5aread_real_3_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              REAL, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3)) :: buf
-              END FUNCTION h5aread_real_3_c
-            END INTERFACE
-
-            hdferr = h5aread_real_3_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_real_3
-
-
-          SUBROUTINE h5aread_real_4(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            REAL, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5aread_real_4_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aread_real_4_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_REAL_4_C'::h5aread_real_4_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              REAL, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-              END FUNCTION h5aread_real_4_c
-            END INTERFACE
-
-            hdferr = h5aread_real_4_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_real_4
-
-
-          SUBROUTINE h5aread_real_5(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            REAL, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5aread_real_5_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aread_real_5_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_REAL_5_C'::h5aread_real_5_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              REAL, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-              END FUNCTION h5aread_real_5_c
-            END INTERFACE
-
-            hdferr = h5aread_real_5_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_real_5
-
-
-          SUBROUTINE h5aread_real_6(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            REAL, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5aread_real_6_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aread_real_6_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_REAL_6_C'::h5aread_real_6_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              REAL, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-              END FUNCTION h5aread_real_6_c
-            END INTERFACE
-
-            hdferr = h5aread_real_6_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_real_6
-
-
-          SUBROUTINE h5aread_real_7(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            REAL, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5aread_real_7_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aread_real_7_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_REAL_7_C'::h5aread_real_7_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              REAL, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-              END FUNCTION h5aread_real_7_c
-            END INTERFACE
-
-            hdferr = h5aread_real_7_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_real_7
-
-          SUBROUTINE h5aread_char_scalar(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            CHARACTER(LEN=*), INTENT(INOUT) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5areadc_s_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5areadc_s_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREADC_S_C'::h5areadc_s_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              CHARACTER(LEN=*), INTENT(INOUT) :: buf
-              END FUNCTION h5areadc_s_c
-            END INTERFACE
-
-            hdferr = h5areadc_s_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_char_scalar
-
-          SUBROUTINE h5aread_char_1(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            CHARACTER(LEN=*), INTENT(INOUT), &
-            DIMENSION(dims(1)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5areadc_1_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5areadc_1_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREADC_1_C'::h5areadc_1_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              CHARACTER(LEN=*), INTENT(INOUT), &
-                   DIMENSION(dims(1)) :: buf
-              END FUNCTION h5areadc_1_c
-            END INTERFACE
-
-            hdferr = h5areadc_1_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_char_1
-
-
-          SUBROUTINE h5aread_char_2(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            CHARACTER(LEN=*), INTENT(INOUT), &
-                 DIMENSION(dims(1),dims(2)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5areadc_2_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5areadc_2_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREADC_2_C'::h5areadc_2_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              CHARACTER(LEN=*), INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2)) :: buf
-              END FUNCTION h5areadc_2_c
-            END INTERFACE
-
-            hdferr = h5areadc_2_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_char_2
-
-
-          SUBROUTINE h5aread_char_3(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            CHARACTER(LEN=*), INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5areadc_3_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5areadc_3_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREADC_3_C'::h5areadc_3_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              CHARACTER(LEN=*), INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3)) :: buf
-              END FUNCTION h5areadc_3_c
-            END INTERFACE
-
-            hdferr = h5areadc_3_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_char_3
-
-
-          SUBROUTINE h5aread_char_4(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            CHARACTER(LEN=*), INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5areadc_4_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5areadc_4_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREADC_4_C'::h5areadc_4_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              CHARACTER(LEN=*), INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-              END FUNCTION h5areadc_4_c
-            END INTERFACE
-
-            hdferr = h5areadc_4_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_char_4
-
-
-          SUBROUTINE h5aread_char_5(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            CHARACTER(LEN=*), INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5areadc_5_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5areadc_5_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREADC_5_C'::h5areadc_5_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              CHARACTER(LEN=*), INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-              END FUNCTION h5areadc_5_c
-            END INTERFACE
-
-            hdferr = h5areadc_5_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_char_5
-
-
-          SUBROUTINE h5aread_char_6(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            CHARACTER(LEN=*), INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5areadc_6_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5areadc_6_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREADC_6_C'::h5areadc_6_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              CHARACTER(LEN=*), INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-              END FUNCTION h5areadc_6_c
-            END INTERFACE
-
-            hdferr = h5areadc_6_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_char_6
-
-
-          SUBROUTINE h5aread_char_7(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            CHARACTER(LEN=*), INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5areadc_7_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5areadc_7_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREADC_7_C'::h5areadc_7_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              CHARACTER(LEN=*), INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-              END FUNCTION h5areadc_7_c
-            END INTERFACE
-
-            hdferr = h5areadc_7_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_char_7
-
-
-!----------------------------------------------------------------------
-! Name:		h5aget_space_f
-!
-! Purpose:  	Gets a copy of the dataspace for an attribute.
-!
-! Inputs:
-!		attr_id		- attribute identifier
-! Outputs:
-!		space_id	- attribite dataspace identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces are added for
-!			called C functions (it is needed for Windows
-!			port).  February 27, 2001
-!
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5aget_space_f(attr_id, space_id, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id  ! Attribute identifier
-            INTEGER(HID_T), INTENT(OUT) :: space_id
-                                            ! Attribute dataspace identifier
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL:: h5aget_space_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aget_space_c(attr_id, space_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AGET_SPACE_C'::h5aget_space_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(OUT) :: space_id
-              END FUNCTION h5aget_space_c
-            END INTERFACE
-
-            hdferr = h5aget_space_c(attr_id, space_id)
-          END SUBROUTINE h5aget_space_f
-
-!----------------------------------------------------------------------
-! Name:		h5aget_type_f
-!
-! Purpose:  	Gets an attribute datatype.
-!
-! Inputs:
-!		attr_id 	- attribute identifier
-! Outputs:
-!		type_id		- attribute datatype identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces are added for
-!			called C functions (it is needed for Windows
-!			port).  February 27, 2001
-!
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5aget_type_f(attr_id, type_id, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id  ! Attribute identifier
-            INTEGER(HID_T), INTENT(OUT) :: type_id
-                                              ! Attribute datatype identifier
-            INTEGER, INTENT(OUT) :: hdferr    ! Error code
-
-!            INTEGER, EXTERNAL :: h5aget_type_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aget_type_c(attr_id, type_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AGET_TYPE_C'::h5aget_type_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(OUT) :: type_id
-              END FUNCTION h5aget_type_c
-            END INTERFACE
-
-            hdferr = h5aget_type_c(attr_id, type_id)
-          END SUBROUTINE h5aget_type_f
-
-!----------------------------------------------------------------------
-! Name:		h5aget_name_f
-!
-! Purpose: 	Gets an attribute name.
-!
-! Inputs:
-!		attr_id		- attribute identifier
-!		size		- size of a buffer to read name in
-! Outputs:
-!		buf		- buffer to read name in
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces are added for
-!			called C functions (it is needed for Windows
-!			port).  February 27, 2001
-!
-!----------------------------------------------------------------------
-
-
+    
+    hdferr = h5aget_type_c(attr_id, type_id)
+  END SUBROUTINE h5aget_type_f
+!
+!****s* H5A/h5aget_name_f
+!
+! NAME
+!  h5aget_name_f
+!
+! PURPOSE
+!  Gets an attribute name.
+!
+! INPUTS
+!  attr_id 	 - attribute identifier
+!  size 	 - size of a buffer to read name in
+! OUTPUTS
+!  buf 	         - buffer to read name in
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces are added for
+!  called C functions (it is needed for Windows
+!  port).  February 27, 2001
+!
+!
+! SOURCE
   SUBROUTINE h5aget_name_f(attr_id, size, buf, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: attr_id  ! Attribute identifier
     INTEGER(SIZE_T), INTENT(IN) :: size    ! Buffer size
-    CHARACTER(LEN=*), INTENT(INOUT) :: buf
-                                           ! Buffer to hold attribute name
+    CHARACTER(LEN=*), INTENT(INOUT) :: buf ! Buffer to hold attribute name
     INTEGER, INTENT(OUT) :: hdferr ! Error code:
-                                   ! name length is successful,
-                                   ! -1 if fail
-
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+                                   ! name length is successful, -1 if fail
+!*****
     INTERFACE
        INTEGER FUNCTION h5aget_name_c(attr_id, size, buf)
          USE H5GLOBAL
@@ -1969,47 +370,46 @@ CONTAINS
     hdferr = h5aget_name_c(attr_id, size, buf)
   END SUBROUTINE h5aget_name_f
 
-!----------------------------------------------------------------------
-! Name:		h5aget_name_by_idx_f
 !
-! Purpose: 	Gets an attribute name, by attribute index position.
+!****s* H5A/h5aget_name_by_idx_f
 !
-! Inputs:
-!          loc_id   - Location of object to which attribute is attached
-!          obj_name - Name of object to which attribute is attached, relative to location
-!          idx_type - Type of index; Possible values are:
+! NAME
+!  h5aget_name_by_idx_f
 !
-!                  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
+! PURPOSE
+!  Gets an attribute name, by attribute index position.
 !
-!          order    - Order in which to iterate over index; Possible values are:
+! INPUTS
+!  loc_id 	 - Location of object to which attribute is attached
+!  obj_name 	 - Name of object to which attribute is attached, relative to location
+!  idx_type 	 - Type of index; Possible values are:
+!                   H5_INDEX_UNKNOWN_F = -1  - Unknown index type
+!                   H5_INDEX_NAME_F 	     - Index on names
+!                   H5_INDEX_CRT_ORDER_F     - Index on creation order
+!                   H5_INDEX_N_F 	     - Number of indices defined
 !
-!                  H5_ITER_UNKNOWN_F   - Unknown order
-!                  H5_ITER_INC_F       - Increasing order
-!                  H5_ITER_DEC_F       - Decreasing order
-!                  H5_ITER_NATIVE_F    - No particular order, whatever is fastest
-!                  H5_ITER_N_F	     - Number of iteration orders
+!  order 	 - Order in which to iterate over index; Possible values are:
+!                   H5_ITER_UNKNOWN_F 	 - Unknown order
+!                   H5_ITER_INC_F 	 - Increasing order
+!                   H5_ITER_DEC_F 	 - Decreasing order
+!                   H5_ITER_NATIVE_F 	 - No particular order, whatever is fastest
+!                   H5_ITER_N_F 	 - Number of iteration orders
+!  order 	 - Index traversal order
+!  n 	         - Attribute’s position in index
 !
-!          order    - Index traversal order
-!              n    - Attribute’s position in index
+! OUTPUTS
+!  name 	 - Attribute name
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Outputs:
-!		name            - Attribute name
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!        lapl_id    - Link access property list
-!           size    - Size, in bytes, of attribute name
+! OPTIONAL PARAMETERS
+!  lapl_id 	 - Link access property list
+!  size 	 - Size, in bytes, of attribute name
 !
-! Programmer:   M.S. Breitenfeld
-!		January, 2008
+! AUTHOR
+!  M. Scot Breitenfeld
+!  January, 2008
 !
-! Modifications: N/A
-!----------------------------------------------------------------------
-
+! SOURCE
   SUBROUTINE h5aget_name_by_idx_f(loc_id, obj_name, idx_type, order, &
        n, name, hdferr, size, lapl_id)
     IMPLICIT NONE
@@ -2028,23 +428,19 @@ CONTAINS
                                     !    H5_ITER_DEC_F       - Decreasing order
                                     !    H5_ITER_NATIVE_F    - No particular order, whatever is fastest
                                     !    H5_ITER_N_F 	    - Number of iteration orders
-
     INTEGER(HSIZE_T), INTENT(IN) :: n !  Attribute’s position in index
-
     CHARACTER(LEN=*), INTENT(OUT) :: name ! Attribute name
-
-
     INTEGER, INTENT(OUT) :: hdferr    ! Error code:
-                                         ! Returns attribute name size,
-                                         ! -1 if fail
-    INTEGER(SIZE_T) :: obj_namelen
-    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id   ! Link access property list
+                                      ! Returns attribute name size,
+                                      ! -1 if fail
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list
+    INTEGER(SIZE_T), OPTIONAL, INTENT(OUT) :: size  ! Indicates the size, in the number of characters, 
+                                                    ! of the attribute
+!*****
     INTEGER(HID_T) :: lapl_id_default
-    INTEGER(SIZE_T), OPTIONAL, INTENT(OUT) :: size   ! Indicates the size, in the number of characters, of the attribute
+    INTEGER(SIZE_T) :: obj_namelen
     INTEGER(SIZE_T) :: size_default
-!
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+
     INTERFACE
        INTEGER FUNCTION h5aget_name_by_idx_c(loc_id, obj_name, obj_namelen, idx_type, order, &
             n, name, size_default, lapl_id_default)
@@ -2079,43 +475,39 @@ CONTAINS
 
 
   END SUBROUTINE h5aget_name_by_idx_f
-
-
-!----------------------------------------------------------------------
-! Name:		h5aget_num_attrs_f
 !
-! Purpose:  	Determines the number of attributes attached to an object.
+!****s* H5A/h5aget_num_attrs_f
 !
-! Inputs:
-!		obj_id		- object (group, dataset, or named datatype)
-!				  identifier
-! Outputs:
-!		attr_num	- number of attributes attached to the object
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5aget_num_attrs_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Determines the number of attributes attached to an object.
 !
-! Modifications: 	Explicit Fortran interfaces are added for
-!			called C functions (it is needed for Windows
-!			port).  February 27, 2001
+! INPUTS
+!  obj_id 	 - object (group, dataset, or named datatype)
+!  identifier
+! OUTPUTS
+!  attr_num 	 - number of attributes attached to the object
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-!----------------------------------------------------------------------
-
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces are added for
+!  called C functions (it is needed for Windows
+!  port).  February 27, 2001
+!
+! SOURCE
   SUBROUTINE h5aget_num_attrs_f(obj_id, attr_num, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: obj_id  ! Object identifier
-    INTEGER, INTENT(OUT) :: attr_num      ! Number of attributes of the
-    ! object
-    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+    INTEGER, INTENT(OUT) :: attr_num      ! Number of attributes of the object
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
 
-!            INTEGER, EXTERNAL :: h5aget_num_attrs_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5aget_num_attrs_c(obj_id, attr_num)
          USE H5GLOBAL
@@ -2130,42 +522,40 @@ CONTAINS
     hdferr = h5aget_num_attrs_c(obj_id, attr_num)
   END SUBROUTINE h5aget_num_attrs_f
 
-!----------------------------------------------------------------------
-! Name:		h5adelete_f
 !
-! Purpose:  	Deletes an attribute of an object (group, dataset or
-!		named datatype)
+!****s* H5A/h5adelete_f
 !
-! Inputs:
-!		obj_id		- object identifier
-!		name		- attribute name
-! Outputs:
+! NAME
+!  h5adelete_f
 !
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! PURPOSE
+!  Deletes an attribute of an object (group, dataset or
+!  named datatype)
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! INPUTS
+!  obj_id 	 - object identifier
+!  name 	 - attribute name
+! OUTPUTS
 !
-! Modifications: 	Explicit Fortran interfaces are added for
-!			called C functions (it is needed for Windows
-!			port).  February 27, 2001
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-!----------------------------------------------------------------------
-
+! HISTORY
+!  Explicit Fortran interfaces are added for
+!  called C functions (it is needed for Windows
+!  port).  February 27, 2001
+!
+! SOURCE
   SUBROUTINE h5adelete_f(obj_id, name, hdferr)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: obj_id    ! Object identifier
-    CHARACTER(LEN=*), INTENT(IN) :: name    ! Attribute name
-    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    INTEGER(HID_T), INTENT(IN) :: obj_id  ! Object identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name  ! Attribute name
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
     INTEGER(SIZE_T) :: namelen
 
-!            INTEGER, EXTERNAL ::  h5adelete_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5adelete_c(obj_id, name, namelen)
          USE H5GLOBAL
@@ -2183,38 +573,36 @@ CONTAINS
     hdferr = h5adelete_c(obj_id, name, namelen)
   END SUBROUTINE h5adelete_f
 
-!----------------------------------------------------------------------
-! Name:		h5aclose_f
 !
-! Purpose:  	Closes the specified attribute.
+!****s* H5A/h5aclose_f
 !
-! Inputs:
-!		attr_id		- attribute identifier
-! Outputs:
+! NAME
+!  h5aclose_f
 !
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! PURPOSE
+!  Closes the specified attribute.
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! INPUTS
+!  attr_id  - attribute identifier
+! OUTPUTS
 !
-! Modifications: 	Explicit Fortran interfaces are added for
-!			called C functions (it is needed for Windows
-!			port).  February 27, 2001
+!  hdferr   - Returns 0 if successful and -1 if fails
 !
-!----------------------------------------------------------------------
-
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces are added for
+!  called C functions (it is needed for Windows
+!  port).  February 27, 2001
+! SOURCE
   SUBROUTINE h5aclose_f(attr_id, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: attr_id  ! Attribute identifier
-    INTEGER, INTENT(OUT) :: hdferr         ! Error code:
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+!*****
 
-!            INTEGER, EXTERNAL :: h5aclose_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5aclose_c(attr_id)
          USE H5GLOBAL
@@ -2228,36 +616,32 @@ CONTAINS
     hdferr = h5aclose_c(attr_id)
   END SUBROUTINE h5aclose_f
 
-!----------------------------------------------------------------------
-! Name:		h5aget_storage_size_f
 !
-! Purpose:  	Returns the amount of storage required for an attribute.
+!****s* H5A/h5aget_storage_size_f
 !
-! Inputs:
-!		attr_id		- attribute identifier
-! Outputs:
-!               size            - attribute storage size
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5aget_storage_size_f
 !
-! Programmer:	M. S. Breitenfeld
-!		January, 2008
+! PURPOSE
+!  Returns the amount of storage required for an attribute.
 !
-! Modifications:  N/A
+! INPUTS
+!  attr_id 	 - attribute identifier
+! OUTPUTS
+!  size 	 - attribute storage size
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  M. Scot Breitenfeld
+!  January, 2008
 !
-!----------------------------------------------------------------------
-
+! SOURCE
   SUBROUTINE h5aget_storage_size_f(attr_id, size, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: attr_id  ! Attribute identifier
-    INTEGER(HSIZE_T), INTENT(OUT) :: size   ! Attribute storage requirement
+    INTEGER(HSIZE_T), INTENT(OUT) :: size  ! Attribute storage requirement
     INTEGER, INTENT(OUT) :: hdferr         ! Error code
+!*****
 
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5aget_storage_size_c(attr_id, size)
          USE H5GLOBAL
@@ -2272,37 +656,34 @@ CONTAINS
     hdferr = h5aget_storage_size_c(attr_id, size)
   END SUBROUTINE h5aget_storage_size_f
 
-!----------------------------------------------------------------------
-! Name:		h5aget_create_plist_f
 !
-! Purpose:  	Gets an attribute creation property list identifier
+!****s* H5A/h5aget_create_plist_f
 !
-! Inputs:
-!		attr_id		  - Identifier of the attribute
-! Outputs:
-!               creation_prop_id  - Identifier for the attribute’s creation property
-!		hdferr:		  - error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5aget_create_plist_f
 !
-! Programmer:	M. S. Breitenfeld
-!		January, 2008
+! PURPOSE
+!  Gets an attribute creation property list identifier
 !
-! Modifications:  N/A
+! INPUTS
+!  attr_id 	    - Identifier of the attribute
+! OUTPUTS
+!  creation_prop_id - Identifier for the attribute’s creation property
+!  hdferr 	    - Returns 0 if successful and -1 if fails
 !
-!----------------------------------------------------------------------
-
+! AUTHOR
+!  M. Scot Breitenfeld
+!  January, 2008
+!
+! SOURCE
   SUBROUTINE h5aget_create_plist_f(attr_id, creation_prop_id, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: attr_id  ! Identifier of the attribute
     INTEGER(HID_T), INTENT(OUT) :: creation_prop_id   ! Identifier for the attribute’s creation property
-    INTEGER, INTENT(OUT) :: hdferr       ! Error code:
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
                                          ! 0 on success and -1 on failure
+!*****
 
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5aget_create_plist_c(attr_id, creation_prop_id)
          USE H5GLOBAL
@@ -2317,31 +698,31 @@ CONTAINS
     hdferr = h5aget_create_plist_c(attr_id, creation_prop_id)
   END SUBROUTINE h5aget_create_plist_f
 
-!----------------------------------------------------------------------
-! Name:		h5arename_by_name_f
 !
-! Purpose: 	Renames an attribute
+!****s* H5A/h5arename_by_name_f
 !
-! Inputs:
-!		loc_id        - Location or object identifier; may be dataset or group
-!		obj_name      - Name of object, relative to location,
-!                                whose attribute is to be renamed
-!               old_attr_name - Prior attribute name
-!               new_attr_name - New attribute name
-!               lapl_id       - Link access property list identifier
+! NAME
+!  h5arename_by_name_f
 !
-! Outputs:
-!		hdferr:	      - error code
-!				 	Success:  0
-!				 	Failure: -1
+! PURPOSE
+!  Renames an attribute
 !
-! Programmer:	M.S. Breitenfeld
-!		January, 2008
+! INPUTS
+!  loc_id 	 - Location or object identifier; may be dataset or group
+!  obj_name 	 - Name of object, relative to location,
+!                  whose attribute is to be renamed
+!  old_attr_name - Prior attribute name
+!  new_attr_name - New attribute name
+!  lapl_id 	 - Link access property list identifier
 !
-! Modifications: N/A
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-!----------------------------------------------------------------------
-
+! AUTHOR
+!  M. Scot Breitenfeld
+!  January, 2008
+!
+! SOURCE
   SUBROUTINE h5arename_by_name_f(loc_id, obj_name, old_attr_name, new_attr_name, &
         hdferr, lapl_id)
     IMPLICIT NONE
@@ -2354,14 +735,12 @@ CONTAINS
     INTEGER, INTENT(OUT) :: hdferr       ! Error code:
                                          ! 0 on success and -1 on failure
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list identifier
-
+!*****
     INTEGER(HID_T) :: lapl_id_default
     INTEGER(SIZE_T) :: obj_namelen
     INTEGER(SIZE_T) :: old_attr_namelen
     INTEGER(SIZE_T) :: new_attr_namelen
 
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5arename_by_name_c(loc_id, obj_name, obj_namelen, &
             old_attr_name, old_attr_namelen, new_attr_name, new_attr_namelen, &
@@ -2370,7 +749,7 @@ CONTAINS
          !DEC$IF DEFINED(HDF5F90_WINDOWS)
          !DEC$ATTRIBUTES C,reference,decorate,alias:'H5ARENAME_BY_NAME_C'::h5arename_by_name_c
          !DEC$ENDIF
-         !DEC$ATTRIBUTES reference :: obj_name,  old_attr_name, new_attr_name
+         !DEC$ATTRIBUTES reference :: obj_name, old_attr_name, new_attr_name
          INTEGER(HID_T), INTENT(IN) :: loc_id
          CHARACTER(LEN=*), INTENT(IN) :: obj_name
          INTEGER(SIZE_T) :: obj_namelen
@@ -2396,30 +775,31 @@ CONTAINS
 
   END SUBROUTINE h5arename_by_name_f
 
-!----------------------------------------------------------------------
-! Name:		h5aopen_f
 !
-! Purpose:  	Opens an attribute for an object specified by object
-!               identifier and attribute name
+!****s* H5A/h5aopen_f
 !
-! Inputs:
-!		obj_id      - Identifer for object to which attribute is attached
-!               attr_name   - Name of attribute to open
-! Outputs:
-!		attr_id     - attribute identifier
-!		hdferr:     - error code
-!				 Success:  0
-!				 Failure: -1
-! Optional parameters:
-!		aapl_id     - Attribute access property list
+! NAME
+!  h5aopen_f
 !
-! Programmer:	M.S. Breitenfeld
-!		January, 2008
+! PURPOSE
+!  Opens an attribute for an object specified by object
+!  identifier and attribute name
 !
-! Modifications: N/A
-!
-!----------------------------------------------------------------------
+! INPUTS
+!  obj_id 	 - Identifer for object to which attribute is attached
+!  attr_name 	 - Name of attribute to open
+! OUTPUTS
+!  attr_id 	 - attribute identifier
 
+! OPTIONAL PARAMETERS
+!  aapl_id 	 - Attribute access property list
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  January, 2008
+!
+! SOURCE
   SUBROUTINE h5aopen_f(obj_id, attr_name, attr_id, hdferr, aapl_id)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: obj_id      ! Object identifier
@@ -2429,12 +809,11 @@ CONTAINS
                                               !   Success:  0
                                               !   Failure: -1
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: aapl_id     ! Attribute access property list
+!*****
     INTEGER(HID_T) :: aapl_id_default
 
     INTEGER(SIZE_T) :: attr_namelen
 
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5aopen_c(obj_id, attr_name, attr_namelen, aapl_id_default, attr_id)
          USE H5GLOBAL
@@ -2459,43 +838,42 @@ CONTAINS
 
   END SUBROUTINE h5aopen_f
 
-!----------------------------------------------------------------------
-! Name:		h5adelete_by_idx_f
-!
-! Purpose:  	Deletes an attribute from an object according to index order
 !
-! Inputs:
-!		loc_id     - Location or object identifier; may be dataset or group
-!               obj_name   - Name of object, relative to location, from which attribute is to be removed
-!               idx_type   - Type of index; Possible values are:
+!****s* H5A/h5adelete_by_idx_f
 !
-!                  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
+! NAME
+!  h5adelete_by_idx_f
 !
-!               order - Order in which to iterate over index; Possible values are:
+! PURPOSE
+!  Deletes an attribute from an object according to index order
 !
-!                  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
+! INPUTS
+!  loc_id 	 - Location or object identifier; may be dataset or group
+!  obj_name 	 - Name of object, relative to location, from which attribute is to be removed
+!  idx_type 	 - Type of index; Possible values are:
+!                   H5_INDEX_UNKNOWN_F = -1  - Unknown index type
+!                   H5_INDEX_NAME_F 	     - Index on names
+!                   H5_INDEX_CRT_ORDER_F     - Index on creation order
+!                   H5_INDEX_N_F 	     - Number of indices defined
 !
-!               n          - Offset within index
-! Outputs:
-!		hdferr:     - error code
-!				 Success:  0
-!				 Failure: -1
-! Optional parameters:
-!               lapl_id    - Link access property list
+!  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
 !
-! Programmer:	M.S. Breitenfeld
-!		January, 2008
+!  n 	         - Offset within index
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  lapl_id 	 - Link access property list
 !
-! Modifications: N/A
+! AUTHOR
+!  M. Scot Breitenfeld
+!  January, 2008
 !
-!----------------------------------------------------------------------
+! SOURCE
   SUBROUTINE h5adelete_by_idx_f(loc_id, obj_name, idx_type, order, n, hdferr, lapl_id)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: loc_id      ! Identifer for object to which attribute is attached
@@ -2513,17 +891,14 @@ CONTAINS
                                               !    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(SIZE_T) :: obj_namelen
-    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id     ! Link access property list
-
     INTEGER(HID_T) :: lapl_id_default
 
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5adelete_by_idx_c(loc_id, obj_name, obj_namelen, idx_type, order, n, lapl_id_default)
          USE H5GLOBAL
@@ -2549,45 +924,43 @@ CONTAINS
 
   END SUBROUTINE h5adelete_by_idx_f
 
-!----------------------------------------------------------------------
-! Name:		h5adelete_by_name_f
 !
-! Purpose:  	Removes an attribute from a specified location
+!****s* H5A/h5adelete_by_name_f
 !
-! Inputs:
-!		loc_id     - Identifer for object to which attribute is attached
-!               obj_name   - Name of attribute to open
-!		attr_name  - Attribute access property list
-!               lapl_id    - Link access property list
-! Outputs:
-!		hdferr:     - error code
-!				 Success:  0
-!				 Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5adelete_by_name_f
 !
-! Programmer:	M.S. Breitenfeld
-!		January, 2008
+! PURPOSE
+!  Removes an attribute from a specified location
 !
-! Modifications: N/A
+! INPUTS
+!  loc_id 	 - Identifer for object to which attribute is attached
+!  obj_name 	 - Name of attribute to open
+!  attr_name 	 - Attribute access property list
+!  lapl_id 	 - Link access property list
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-!----------------------------------------------------------------------
+! AUTHOR
+!  M. Scot Breitenfeld
+!  January, 2008
+!
+! SOURCE
   SUBROUTINE h5adelete_by_name_f(loc_id, obj_name, attr_name, hdferr, lapl_id)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: loc_id      ! Identifer for object to which attribute is attached
     CHARACTER(LEN=*), INTENT(IN) :: obj_name  ! Name of object, relative to location,
                                               !  from which attribute is to be removed
     CHARACTER(LEN=*), INTENT(IN) :: attr_name ! Name of attribute to delete
-    INTEGER, INTENT(OUT) :: hdferr          ! Error code:
-                                            ! 0 on success and -1 on failure
-    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id     ! Link access property list
+    INTEGER, INTENT(OUT) :: hdferr            ! Error code:
+                                              ! 0 on success and -1 on failure
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list
+!*****
     INTEGER(SIZE_T) :: attr_namelen
     INTEGER(SIZE_T) :: obj_namelen
 
     INTEGER(HID_T) :: lapl_id_default
 
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5adelete_by_name_c(loc_id, obj_name, obj_namelen, attr_name, attr_namelen, lapl_id_default)
          USE H5GLOBAL
@@ -2614,32 +987,32 @@ CONTAINS
 
   END SUBROUTINE h5adelete_by_name_f
 
-!----------------------------------------------------------------------
-! Name:		h5aopen_by_idx_f
 !
-! Purpose:  	Opens an existing attribute that is attached to an object specified by location and name
+!****s* H5A/h5aopen_by_idx_f
 !
-! Inputs:
-!		loc_id      - Location of object to which attribute is attached
-!               obj_name    - Name of object to which attribute is attached, relative to location
-!               idx_type    - Type of index
-!               order       - Index traversal order
-!               n           - Attribute’s position in index
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!               aapl_id     - Attribute access property list
-!               lapl_id     - Link access property list
+! NAME
+!  h5aopen_by_idx_f
 !
-! Programmer:	M.S. Breitenfeld
-!		January, 2008
+! PURPOSE
+!  Opens an existing attribute that is attached to an object specified by location and name
 !
-! Modifications: N/A
+! INPUTS
+!  loc_id 	 - Location of object to which attribute is attached
+!  obj_name 	 - Name of object to which attribute is attached, relative to location
+!  idx_type 	 - Type of index
+!  order 	 - Index traversal order
+!  n 	         - Attribute’s position in index
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  aapl_id 	 - Attribute access property list
+!  lapl_id 	 - Link access property list
 !
-!----------------------------------------------------------------------
-
+! AUTHOR
+!  M. Scot Breitenfeld
+!  January, 2008
+!
+! SOURCE
   SUBROUTINE h5aopen_by_idx_f(loc_id, obj_name, idx_type, order, n, attr_id, hdferr, aapl_id, lapl_id)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: loc_id      ! Object identifier
@@ -2655,21 +1028,18 @@ CONTAINS
                                               !    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(HSIZE_T), INTENT(IN) :: n       ! Attribute’s position in index
 
     INTEGER(HID_T), INTENT(OUT) :: attr_id  ! Attribute identifier
     INTEGER, INTENT(OUT) :: hdferr          ! Error code:
                                             ! 0 on success and -1 on failure
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: aapl_id  ! Attribute access property list
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id  ! Link access property list
-
+!*****
     INTEGER(SIZE_T) :: obj_namelen
     INTEGER(HID_T) :: aapl_id_default
     INTEGER(HID_T) :: lapl_id_default
 
-!
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5aopen_by_idx_c(loc_id, obj_name, obj_namelen, idx_type, order, n, &
             aapl_id_default, lapl_id_default, attr_id)
@@ -2702,49 +1072,43 @@ CONTAINS
 
   END SUBROUTINE h5aopen_by_idx_f
 
-!----------------------------------------------------------------------
-! Name:		h5aget_info_f
-!
-! Purpose:  	Retrieves attribute information, by attribute identifier
-!
-! Inputs:
-!		attr_id		- attribute identifier
 !
-! Outputs:  NOTE: In C it is defined as a structure: H5A_info_t
+!****s* H5A/h5aget_info_f
 !
-!    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
+! NAME
+!  h5aget_info_f
 !
-!    hdferr         - error code
-!				 Success:  0
-!				 Failure: -1
-! Optional parameters:
-!				NONE
+! PURPOSE
+!  Retrieves attribute information, by attribute identifier
 !
-! Programmer:	M. S. Breitenfeld
-!		January, 2008
+! INPUTS
+!  attr_id 	 - attribute identifier
 !
-! Modifications:  N/A
+! OUTPUTS
+!  NOTE: In C it is defined as a structure: H5A_info_t
 !
-!----------------------------------------------------------------------
-
-  SUBROUTINE h5aget_info_f(attr_id, f_corder_valid, corder, cset, data_size,  hdferr)
+!  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 	 - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  M. Scot Breitenfeld
+!  January, 2008
+! SOURCE
+  SUBROUTINE h5aget_info_f(attr_id, f_corder_valid, corder, cset, data_size, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: attr_id  ! Attribute identifier
 
     LOGICAL, INTENT(OUT) :: f_corder_valid ! Indicates whether the creation order data is valid for this attribute
     INTEGER, INTENT(OUT) :: corder ! Is a positive integer containing the creation order of the attribute
-    INTEGER, INTENT(OUT) :: cset ! Indicates the character set used for the attribute’s name
-    INTEGER(HSIZE_T), INTENT(OUT) :: data_size   ! Indicates the size, in the number of characters, of the attribute
+    INTEGER, INTENT(OUT) :: cset   ! Indicates the character set used for the attribute’s name
+    INTEGER(HSIZE_T), INTENT(OUT) :: data_size ! Indicates the size, in the number of characters, of the attribute
     INTEGER, INTENT(OUT) :: hdferr       ! Error code:
                                          ! 0 on success and -1 on failure
-
+!*****
     INTEGER :: corder_valid
 
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5aget_info_c(attr_id, corder_valid, corder, cset, data_size)
          USE H5GLOBAL
@@ -2766,43 +1130,43 @@ CONTAINS
     IF (corder_valid .EQ. 1) f_corder_valid =.TRUE.
 
 
-
   END SUBROUTINE h5aget_info_f
 
-!----------------------------------------------------------------------
-! Name:		h5aget_info_by_idx_f
 !
-! Purpose:  	Retrieves attribute information, by attribute index position
+!****s* H5A/h5aget_info_by_idx_f
 !
-! Inputs:
-!	loc_id - Location of object to which attribute is attached
-!     obj_name - Name of object to which attribute is attached, relative to location
-!     idx_type - Type of index
-!        order - Index traversal order
-!            n - Attribute’s position in index
+! NAME
+!  h5aget_info_by_idx_f
 !
-! Outputs:  NOTE: In C it is defined as a structure: H5A_info_t
-!    corder_valid   - indicates whether the creation order data is valid for this attribute
-!    corder         - is a positive integer containing the creation order of the attribute
-!    cset           - indicates the character set used for the attribute’s name
-!    data_size      - indicates the size, in the number of characters, of the attribute
-!    hdferr         - error code
-!				 Success:  0
-!				 Failure: -1
-! Optional parameters:
-!      lapl_id - Link access property list
+! PURPOSE
+!  Retrieves attribute information, by attribute index position
 !
-! Programmer:	M. S. Breitenfeld
-!		January, 2008
+! INPUTS
+!  loc_id 	 - Location of object to which attribute is attached
+!  obj_name 	 - Name of object to which attribute is attached, relative to location
+!  idx_type 	 - Type of index
+!  order 	 - Index traversal order
+!  n 	         - Attribute’s position in index
 !
-! Modifications:  N/A
+! OUTPUTS  NOTE: In C it is defined as a structure: H5A_info_t
+!  corder_valid  - indicates whether the creation order data is valid for this attribute
+!  corder 	 - is a positive integer containing the creation order of the attribute
+!  cset 	 - indicates the character set used for the attribute’s name
+!  data_size 	 - indicates the size, in the number of characters, of the attribute
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  lapl_id 	 - Link access property list
 !
-!----------------------------------------------------------------------
+! AUTHOR
+!  M. Scot Breitenfeld
+!  January, 2008
+!
+! SOURCE
   SUBROUTINE h5aget_info_by_idx_f(loc_id, obj_name, idx_type, order, n, &
        f_corder_valid, corder, cset, data_size, hdferr, lapl_id)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: loc_id    ! Object identifier
-    CHARACTER(LEN=*), INTENT(IN) :: obj_name ! Name of object to which attribute is attached
+    INTEGER(HID_T), INTENT(IN) :: loc_id      ! Object identifier
+    CHARACTER(LEN=*), INTENT(IN) :: obj_name  ! Name of object to which attribute is attached
     INTEGER, INTENT(IN) :: idx_type           ! Type of index; Possible values are:
                                               !    H5_INDEX_UNKNOWN_F   - Unknown index type
                                               !    H5_INDEX_NAME_F      - Index on names
@@ -2814,22 +1178,21 @@ CONTAINS
                                               !    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(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) :: cset   ! Indicates the character set used for the attribute’s name
+    INTEGER(HSIZE_T), INTENT(OUT) :: data_size ! Indicates the size, in the number of characters, of the attribute
     INTEGER, INTENT(OUT) :: hdferr       ! Error code:
                                          ! 0 on success and -1 on failure
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id  ! Link access property list
+!*****
     INTEGER :: corder_valid
     INTEGER(SIZE_T)  :: obj_namelen
-    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id  ! Link access property list
     INTEGER(HID_T) :: lapl_id_default
 
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5aget_info_by_idx_c(loc_id, obj_name, obj_namelen, idx_type, order, n, lapl_id_default, &
             corder_valid, corder, cset, data_size)
@@ -2866,33 +1229,34 @@ CONTAINS
 
   END SUBROUTINE h5aget_info_by_idx_f
 
-!----------------------------------------------------------------------
-! Name:		h5aget_info_by_name_f
 !
-! Purpose:  	Retrieves attribute information, by attribute name
+!****s* H5A/h5aget_info_by_name_f
+!
+! NAME
+!  h5aget_info_by_name_f
 !
-! Inputs:
-!	loc_id - Location of object to which attribute is attached
-!     obj_name - Name of object to which attribute is attached, relative to location
-!    attr_name - Attribute name
+! PURPOSE
+!  Retrieves attribute information, by attribute name
 !
-! Outputs:  NOTE: In C it is defined as a structure: H5A_info_t
-!    corder_valid   - indicates whether the creation order data is valid for this attribute
-!    corder         - is a positive integer containing the creation order of the attribute
-!    cset           - indicates the character set used for the attribute’s name
-!    data_size      - indicates the size, in the number of characters, of the attribute
-!    hdferr         - error code
-!				 Success:  0
-!				 Failure: -1
-! Optional parameters:
-!      lapl_id - Link access property list
+! INPUTS
+!  loc_id 	 - Location of object to which attribute is attached
+!  obj_name 	 - Name of object to which attribute is attached, relative to location
+!  attr_name 	 - Attribute name
 !
-! Programmer:	M. S. Breitenfeld
-!		January, 2008
+! OUTPUTS  NOTE: In C it is defined as a structure: H5A_info_t
+!  corder_valid  - indicates whether the creation order data is valid for this attribute
+!  corder 	 - is a positive integer containing the creation order of the attribute
+!  cset 	 - indicates the character set used for the attribute’s name
+!  data_size 	 - indicates the size, in the number of characters, of the attribute
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  lapl_id 	 - Link access property list
 !
-! Modifications:  N/A
+! AUTHOR
+!  M. Scot Breitenfeld
+!  January, 2008
 !
-!----------------------------------------------------------------------
+! SOURCE
   SUBROUTINE h5aget_info_by_name_f(loc_id, obj_name, attr_name, &
        f_corder_valid, corder, cset, data_size, hdferr, lapl_id)
     IMPLICIT NONE
@@ -2907,15 +1271,13 @@ CONTAINS
     INTEGER(HSIZE_T), INTENT(OUT) :: data_size   ! Indicates the size, in the number of characters, of the attribute
     INTEGER, INTENT(OUT) :: hdferr         ! Error code:
                                            ! 0 on success and -1 on failure
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id  ! Link access property list
+!*****
     INTEGER :: corder_valid
     INTEGER(SIZE_T)  :: obj_namelen
     INTEGER(SIZE_T)  :: attr_namelen
-    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id  ! Link access property list
     INTEGER(HID_T) :: lapl_id_default
 
-
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5aget_info_by_name_c(loc_id, obj_name, obj_namelen, attr_name, attr_namelen, lapl_id_default, &
             corder_valid, corder, cset, data_size)
@@ -2952,52 +1314,49 @@ CONTAINS
 
   END SUBROUTINE h5aget_info_by_name_f
 
-!----------------------------------------------------------------------
-! Name:	        H5Acreate_by_name_f
 !
-! Purpose:  	Creates an attribute attached to a specified object
+!****s* H5A/h5acreate_by_name_f
 !
-! Inputs:
-!   loc_id   	- Location or object identifier; may be dataset or group
-!   obj_name 	- Name, relative to loc_id, of object that attribute is to be attached to
-!   attr_name   - Attribute name
-!   type_id 	- Attribute datatype identifier
-!   space_id 	- Attribute dataspace identifier
+! NAME
+!  h5acreate_by_name_f
 !
-! Outputs:
-!       attr    - an attribute identifier
-!     hdferr    - error code
-!		       Success:  0
-!		       Failure: -1
-! Optional parameters:
-!   acpl_id 	- Attribute creation property list identifier (Currently not used.)
-!   aapl_id 	- Attribute access property list identifier (Currently not used.)
-!   lapl_id 	- Link access property list
+! PURPOSE
+!  Creates an attribute attached to a specified object
 !
-! Programmer:	M. S. Breitenfeld
-!		February, 2008
+! INPUTS
+!  loc_id 	 - Location or object identifier; may be dataset or group
+!  obj_name 	 - Name, relative to loc_id, of object that attribute is to be attached to
+!  attr_name 	 - Attribute name
+!  type_id 	 - Attribute datatype identifier
+!  space_id 	 - Attribute dataspace identifier
 !
-! Modifications:  N/A
+! OUTPUTS
+!  attr 	 - an attribute identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  acpl_id 	 - Attribute creation property list identifier (Currently not used.)
+!  aapl_id 	 - Attribute access property list identifier (Currently not used.)
+!  lapl_id 	 - Link access property list
 !
-!----------------------------------------------------------------------
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February, 2008
+! SOURCE
   SUBROUTINE h5acreate_by_name_f(loc_id, obj_name, attr_name, type_id, space_id, attr, hdferr, &
        acpl_id, aapl_id, lapl_id)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: loc_id    ! Object identifier
-    CHARACTER(LEN=*), INTENT(IN) :: obj_name ! Name of object to which attribute is attached
-    CHARACTER(LEN=*), INTENT(IN) :: attr_name ! Attribute name
-
-    INTEGER(HID_T), INTENT(IN) :: type_id  ! Attribute datatype identifier
-    INTEGER(HID_T), INTENT(IN) :: space_id ! Attribute dataspace identifier
-
-    INTEGER(HID_T), INTENT(OUT) :: attr ! an attribute identifier
-    INTEGER, INTENT(OUT) :: hdferr         ! Error code:
-                                           ! 0 on success and -1 on failure
-
-    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: acpl_id ! Attribute creation property list identifier (Currently not used.)
-    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: aapl_id ! Attribute access property list identifier (Currently not used.)
-    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list
-
+    INTEGER(HID_T),   INTENT(IN)  :: loc_id
+    CHARACTER(LEN=*), INTENT(IN)  :: obj_name
+    CHARACTER(LEN=*), INTENT(IN)  :: attr_name
+    INTEGER(HID_T),   INTENT(IN)  :: type_id
+    INTEGER(HID_T),   INTENT(IN)  :: space_id
+    INTEGER(HID_T),   INTENT(OUT) :: attr
+    INTEGER,          INTENT(OUT) :: hdferr
+
+    INTEGER(HID_T),   INTENT(IN), OPTIONAL :: acpl_id
+    INTEGER(HID_T),   INTENT(IN), OPTIONAL :: aapl_id
+    INTEGER(HID_T),   INTENT(IN), OPTIONAL :: lapl_id
+!*****
     INTEGER(SIZE_T)  :: obj_namelen
     INTEGER(SIZE_T)  :: attr_namelen
 
@@ -3005,8 +1364,6 @@ CONTAINS
     INTEGER(HID_T) :: aapl_id_default
     INTEGER(HID_T) :: lapl_id_default
 
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5acreate_by_name_c(loc_id, obj_name, obj_namelen, attr_name, attr_namelen, &
             type_id, space_id, acpl_id_default, aapl_id_default, lapl_id_default, attr)
@@ -3045,41 +1402,39 @@ CONTAINS
             type_id, space_id, acpl_id_default, aapl_id_default, lapl_id_default, attr)
   END SUBROUTINE h5acreate_by_name_f
 
-!----------------------------------------------------------------------
-! Name:	        H5Aexists_f
 !
-! Purpose:  	Determines whether an attribute with a given name exists on an object
+!****s* H5A/H5Aexists_f
+!
+! NAME
+!  H5Aexists_f
 !
-! Inputs:
-!                 obj_id - Object identifier
-!              attr_name - Attribute name
+! PURPOSE
+!  Determines whether an attribute with a given name exists on an object
 !
-! Outputs:
-!       attr_exists  - attribute exists status
-!            hdferr  - error code
-!		         Success:  0
-!		         Failure: -1
-! Optional parameters:
-!				NONE
+! INPUTS
+!  obj_id 	 - Object identifier
+!  attr_name 	 - Attribute name
 !
-! Programmer:	M. S. Breitenfeld
-!		February, 2008
+! OUTPUTS
+!  attr_exists 	 - attribute exists status
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Modifications:  N/A
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February, 2008
 !
-!----------------------------------------------------------------------
+! SOURCE
   SUBROUTINE h5aexists_f(obj_id, attr_name, attr_exists, hdferr)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: obj_id     ! Object identifier
+    INTEGER(HID_T), INTENT(IN) :: obj_id      ! Object identifier
     CHARACTER(LEN=*), INTENT(IN) :: attr_name ! Attribute name
-    LOGICAL, INTENT(OUT) :: attr_exists ! .TRUE. if exists, .FALSE. otherwise
-    INTEGER, INTENT(OUT) :: hdferr         ! Error code:
-                                           ! 0 on success and -1 on failure
+    LOGICAL, INTENT(OUT) :: attr_exists  ! .TRUE. if exists, .FALSE. otherwise
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code:
+                                         ! 0 on success and -1 on failure
+!*****
     INTEGER(HID_T) :: attr_exists_c
     INTEGER(SIZE_T) :: attr_namelen
-!
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+
     INTERFACE
        INTEGER FUNCTION h5aexists_c(obj_id, attr_name, attr_namelen, attr_exists_c)
          USE H5GLOBAL
@@ -3103,55 +1458,55 @@ CONTAINS
 
   END SUBROUTINE h5aexists_f
 
-!----------------------------------------------------------------------
-! Name:	        H5Aexists_by_name_f
 !
-! Purpose:  	Determines whether an attribute with a given name exists on an object
+!****s* H5A/H5Aexists_by_name_f
+!
+! NAME
+!  H5Aexists_by_name_f
 !
-! Inputs:
-!     loc_id - Location identifier
-!   obj_name - Object name either relative to loc_id, absolute from the file’s root group, or '.' (a dot)
-!  attr_name - Attribute name
+! PURPOSE
+!  Determines whether an attribute with a given name exists on an object
 !
-! Outputs:
-!       attr_exists  - attribute exists status
-!            hdferr  - error code
-!		         Success:  0
-!		         Failure: -1
-! Optional parameters:
-!    lapl_id - Link access property list identifier
+! INPUTS
+!  loc_id 	 - Location identifier
+!  obj_name 	 - Object name either relative to loc_id, absolute from the file’s root group, or '.' (a dot)
+!  attr_name 	 - Attribute name
 !
-! Programmer:	M. S. Breitenfeld
-!		February, 2008
+! OUTPUTS
+!  attr_exists 	 - attribute exists status
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  lapl_id 	 - Link access property list identifier
 !
-! Modifications:  N/A
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February, 2008
 !
-!----------------------------------------------------------------------
+! SOURCE
   SUBROUTINE h5aexists_by_name_f(loc_id, obj_name, attr_name, attr_exists, hdferr, lapl_id)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: loc_id    ! Location identifier
+    INTEGER(HID_T), INTENT(IN) :: loc_id     ! Location identifier
     CHARACTER(LEN=*), INTENT(IN) :: obj_name ! Object name either relative to loc_id,
                                              ! absolute from the file’s root group, or '.'
     CHARACTER(LEN=*), INTENT(IN) :: attr_name ! Attribute name
     LOGICAL, INTENT(OUT) :: attr_exists ! .TRUE. if exists, .FALSE. otherwise
-    INTEGER, INTENT(OUT) :: hdferr         ! Error code:
-                                           ! 0 on success and -1 on failure
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code:
+                                        ! 0 on success and -1 on failure
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list identifier
+!*****
     INTEGER :: attr_exists_c
     INTEGER(SIZE_T)  :: obj_namelen
     INTEGER(SIZE_T)  :: attr_namelen
 
     INTEGER(HID_T) :: lapl_id_default
-!
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+
     INTERFACE
        INTEGER FUNCTION h5aexists_by_name_c(loc_id, obj_name, obj_namelen, attr_name, attr_namelen, lapl_id_default, attr_exists_c)
          USE H5GLOBAL
          !DEC$IF DEFINED(HDF5F90_WINDOWS)
          !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AEXISTS_BY_NAME_C'::h5aexists_by_name_c
          !DEC$ENDIF
-         !DEC$ATTRIBUTES reference :: obj_name, attr_name
+         !DEC$ATTRIBUTES reference :: obj_name, attr_name 
          INTEGER(HID_T), INTENT(IN) :: loc_id
          CHARACTER(LEN=*), INTENT(IN) :: obj_name
          INTEGER(SIZE_T), INTENT(IN) :: obj_namelen
@@ -3174,31 +1529,31 @@ CONTAINS
     IF(attr_exists_c.GT.0) attr_exists = .TRUE.
 
   END SUBROUTINE h5aexists_by_name_f
-!----------------------------------------------------------------------
-! Name:	        H5Aopen_by_name_f
 !
-! Purpose:  	Opens an attribute for an object by object name and attribute name.
+!****s* H5A/H5Aopen_by_name_f
 !
-! Inputs:
-!     loc_id - Location from which to find object to which attribute is attached
-!   obj_name - Object name either relative to loc_id, absolute from the file’s root group, or '.' (a dot)
-!  attr_name - Attribute name
+! NAME
+!  H5Aopen_by_name_f
 !
-! Outputs:
-!       attr_id  - attribute identifier
-!        hdferr  - error code
-!		         Success:  0
-!		         Failure: -1
-! Optional parameters:
-!    aapl_id - Attribute access property list (Currently unused; should be passed in as H5P_DEFAULT.)
-!    lapl_id - Link access property list identifier
+! PURPOSE
+!  Opens an attribute for an object by object name and attribute name.
 !
-! Programmer:	M. S. Breitenfeld
-!		February, 2008
+! INPUTS
+!  loc_id 	 - Location from which to find object to which attribute is attached
+!  obj_name 	 - Object name either relative to loc_id, absolute from the file’s root group, or '.' (a dot)
+!  attr_name 	 - Attribute name
 !
-! Modifications:  N/A
+! OUTPUTS
+!  attr_id 	 - attribute identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  aapl_id 	 - Attribute access property list (Currently unused; should be passed in as H5P_DEFAULT.)
+!  lapl_id 	 - Link access property list identifier
 !
-!----------------------------------------------------------------------
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February, 2008
+! SOURCE
   SUBROUTINE h5aopen_by_name_f(loc_id, obj_name, attr_name, attr_id, hdferr, aapl_id, lapl_id)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: loc_id    ! Location identifier
@@ -3211,15 +1566,13 @@ CONTAINS
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: aapl_id ! Attribute access property list
                                                     ! (Currently unused; should be passed in as H5P_DEFAULT_F)
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list identifier
-
+!*****
     INTEGER(HID_T) :: aapl_id_default
     INTEGER(HID_T) :: lapl_id_default
 
     INTEGER(SIZE_T) :: obj_namelen
     INTEGER(SIZE_T) :: attr_namelen
-!
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+
     INTERFACE
        INTEGER FUNCTION h5aopen_by_name_c(loc_id, obj_name, obj_namelen, attr_name, attr_namelen, &
             aapl_id_default, lapl_id_default, attr_id)
@@ -3252,28 +1605,33 @@ CONTAINS
 
   END SUBROUTINE h5aopen_by_name_f
 
-!----------------------------------------------------------------------
-! Name:		h5arename_f
 !
-! Purpose: 	Renames an attribute
+!****s* H5A/h5arename_f
 !
-! Inputs:
-!		loc_id        - Location or object identifier; may be dataset or group
-!               old_attr_name - Prior attribute name
-!               new_attr_name - New attribute name
+! NAME
+!  h5arename_f
 !
-! Outputs:
-!		hdferr:	      - error code
-!				 	Success:  0
-!				 	Failure: -1
+! PURPOSE
+!  Renames an attribute
 !
-! Programmer:	M.S. Breitenfeld
-!		January, 2008
+! INPUTS
+!  loc_id 	 - Location or object identifier; may be dataset or group
+!  old_attr_name - Prior attribute name
+!  new_attr_name - New attribute name
+!
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  January, 2008
+!
+! HISTORY
+!  N/A
 !
-! Modifications: N/A
 !
-!----------------------------------------------------------------------
 
+! SOURCE
   SUBROUTINE h5arename_f(loc_id, old_attr_name, new_attr_name, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: loc_id    ! Object identifier
@@ -3281,11 +1639,10 @@ CONTAINS
     CHARACTER(LEN=*), INTENT(IN) :: new_attr_name ! New attribute name
     INTEGER, INTENT(OUT) :: hdferr       ! Error code:
                                          ! 0 on success and -1 on failure
+!*****
     INTEGER(SIZE_T) :: old_attr_namelen
     INTEGER(SIZE_T) :: new_attr_namelen
 
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5arename_c(loc_id, &
             old_attr_name, old_attr_namelen, new_attr_name, new_attr_namelen)
diff --git a/fortran/src/H5Aff_F03.f90 b/fortran/src/H5Aff_F03.f90
new file mode 100644
index 0000000..b9e6c92
--- /dev/null
+++ b/fortran/src/H5Aff_F03.f90
@@ -0,0 +1,1274 @@
+!****h* ROBODoc/H5A (F03)
+! NAME
+!  H5A_PROVISIONAL
+!
+! FILE
+!  src/fortran/src/H5Aff_F03.f90
+!
+! PURPOSE
+!  This file contains Fortran 90 and Fortran 2003 interfaces for H5A functions.
+!  It contains the same functions as H5Aff_F90.f90 but includes the
+!  Fortran 2003 functions and the interface listings. This file will be compiled
+!  instead of H5Aff_F90.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 at hdfgroup.org.     *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! NOTES
+!
+!  (A) C_LOC and character strings according to the Fortran 2003 standard:
+!
+!  15.1.2.5 C_LOC(X)
+!
+!  Argument. X shall either
+!
+!  (1) have interoperable type and type parameters and be
+!    (a) a variable that has the TARGET attribute and is interoperable,
+!    (b) an allocated allocatable variable that has the TARGET attribute
+!        and is not an array of zero size, or
+!    (c) an associated scalar pointer, or
+!  (2) be a nonpolymorphic scalar, have no length type parameters, and be
+!    (a) a nonallocatable, nonpointer variable that has the TARGET attribute,
+!    (b) an allocated allocatable variable that has the TARGET attribute, or
+!    (c) an associated pointer.
+!
+!  - When X is a character, for interoperability the standard is:
+!
+!  15.2.1 Interoperability of intrinsic types
+!
+!  ...if the type is character, interoperability also requires that the length type parameter
+!  be omitted or be specified by an initialization expression whose value is one.
+!
+!  THEREFORE compilers that have not extended the standard  require
+!
+!  CHARACTER(LEN=1), TARGET :: chr
+!  or
+!  CHARACTER, TARGET :: chr
+!
+!  (B)
+!                         *** IMPORTANT ***
+!  If you add a new H5A function 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 H5A_PROVISIONAL
+
+  USE H5GLOBAL
+!
+!  On Windows there are no big (integer*8) integers, so overloading
+!  for bug #670 does not work. I have to use DEC compilation directives to make
+!  Windows DEC Visual Fortran and OSF compilers happy and do right things.
+!  05/01/02 EP
+!
+  INTERFACE h5awrite_f
+     MODULE PROCEDURE h5awrite_integer_scalar
+     MODULE PROCEDURE h5awrite_integer_1
+     MODULE PROCEDURE h5awrite_integer_2
+     MODULE PROCEDURE h5awrite_integer_3
+     MODULE PROCEDURE h5awrite_integer_4
+     MODULE PROCEDURE h5awrite_integer_5
+     MODULE PROCEDURE h5awrite_integer_6
+     MODULE PROCEDURE h5awrite_integer_7
+     MODULE PROCEDURE h5awrite_char_scalar
+     MODULE PROCEDURE h5awrite_char_1
+     MODULE PROCEDURE h5awrite_char_2
+     MODULE PROCEDURE h5awrite_char_3
+     MODULE PROCEDURE h5awrite_char_4
+     MODULE PROCEDURE h5awrite_char_5
+     MODULE PROCEDURE h5awrite_char_6
+     MODULE PROCEDURE h5awrite_char_7
+     MODULE PROCEDURE h5awrite_real_scalar
+     MODULE PROCEDURE h5awrite_real_1
+     MODULE PROCEDURE h5awrite_real_2
+     MODULE PROCEDURE h5awrite_real_3
+     MODULE PROCEDURE h5awrite_real_4
+     MODULE PROCEDURE h5awrite_real_5
+     MODULE PROCEDURE h5awrite_real_6
+     MODULE PROCEDURE h5awrite_real_7
+     ! This is the preferred way to call h5awrite
+     ! by passing an address
+     MODULE PROCEDURE h5awrite_ptr
+
+  END INTERFACE
+
+  INTERFACE h5aread_f
+
+     MODULE PROCEDURE h5aread_integer_scalar
+     MODULE PROCEDURE h5aread_integer_1
+     MODULE PROCEDURE h5aread_integer_2
+     MODULE PROCEDURE h5aread_integer_3
+     MODULE PROCEDURE h5aread_integer_4
+     MODULE PROCEDURE h5aread_integer_5
+     MODULE PROCEDURE h5aread_integer_6
+     MODULE PROCEDURE h5aread_integer_7
+     MODULE PROCEDURE h5aread_char_scalar
+     MODULE PROCEDURE h5aread_char_1
+     MODULE PROCEDURE h5aread_char_2
+     MODULE PROCEDURE h5aread_char_3
+     MODULE PROCEDURE h5aread_char_4
+     MODULE PROCEDURE h5aread_char_5
+     MODULE PROCEDURE h5aread_char_6
+     MODULE PROCEDURE h5aread_char_7
+     MODULE PROCEDURE h5aread_real_scalar
+     MODULE PROCEDURE h5aread_real_1
+     MODULE PROCEDURE h5aread_real_2
+     MODULE PROCEDURE h5aread_real_3
+     MODULE PROCEDURE h5aread_real_4
+     MODULE PROCEDURE h5aread_real_5
+     MODULE PROCEDURE h5aread_real_6
+     MODULE PROCEDURE h5aread_real_7
+
+     ! This is the preferred way to call h5aread
+     ! by passing an address
+     MODULE PROCEDURE h5aread_ptr
+
+  END INTERFACE
+
+!  Interface for the function used to pass the C pointer of the buffer
+!  to the C H5Awrite routine
+
+  INTERFACE
+     INTEGER FUNCTION h5awrite_f_c(attr_id, mem_type_id, buf)
+       USE H5GLOBAL
+       USE, INTRINSIC :: ISO_C_BINDING
+       !DEC$IF DEFINED(HDF5F90_WINDOWS)
+       !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_F_C'::h5awrite_f_c
+       !DEC$ENDIF
+       INTEGER(HID_T), INTENT(IN) :: attr_id
+       INTEGER(HID_T), INTENT(IN) :: mem_type_id
+       TYPE(C_PTR), VALUE :: buf
+     END FUNCTION h5awrite_f_c
+  END INTERFACE
+
+!  Interface for the function used to pass the C pointer of the buffer
+!  to the C H5Aread routine
+
+  INTERFACE
+     INTEGER FUNCTION h5aread_f_c(attr_id, mem_type_id, buf)
+       USE H5GLOBAL
+       USE, INTRINSIC :: ISO_C_BINDING
+       !DEC$IF DEFINED(HDF5F90_WINDOWS)
+       !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_F_C'::h5aread_f_c
+       !DEC$ENDIF
+       INTEGER(HID_T), INTENT(IN) :: attr_id
+       INTEGER(HID_T), INTENT(IN) :: mem_type_id
+       TYPE(C_PTR), VALUE :: buf
+     END FUNCTION h5aread_f_c
+  END INTERFACE
+
+CONTAINS
+
+!****s* H5A (F03)/h5awrite_f_F90
+!
+! NAME
+!  h5awrite_f_F90
+!
+! PURPOSE
+!  Writes an attribute.
+!
+! Inputs:
+!  attr_id     - Attribute identifier
+!  memtype_id  - Attribute datatype identifier  (in memory)
+!  dims        - Array to hold corresponding dimension sizes of data buffer buf;
+!                dim(k) has value of the k-th dimension of buffer buf;
+!                values are ignored if buf is a scalar
+!  buf 	       - Data buffer; may be a scalar or an array
+!
+! Outputs:
+!  hdferr      - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces are added for
+!  called C functions (it is needed for Windows
+!  port).  February 27, 2001
+!
+!  dims parameter was added to make code portable;
+!  Aprile 4, 2001
+!
+!  Changed buf intent to INOUT to be consistant
+!  with how the C functions handles it. The pg
+!  compiler will return 0 if a buf value is not set.
+!  February, 2008
+!
+! NOTES
+!  This function is overloaded to write INTEGER,
+!  REAL, DOUBLE PRECISION and CHARACTER buffers
+!  up to 7 dimensions.
+!
+! Fortran90 Interface:
+!!  SUBROUTINE h5awrite_f(attr_id, memtype_id, buf, dims, hdferr) 
+!!    INTEGER(HID_T)  , INTENT(IN)               :: attr_id
+!!    INTEGER(HID_T)  , INTENT(IN)               :: memtype_id
+!!    TYPE            , INTENT(IN)               :: buf
+!!    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+!!    INTEGER         , INTENT(OUT)              :: hdferr
+!*****
+
+
+  SUBROUTINE h5awrite_integer_scalar(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN), TARGET :: buf                 ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr                     ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf)
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5awrite_integer_scalar
+
+  SUBROUTINE h5awrite_integer_1(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN) , &
+         DIMENSION(dims(1)), TARGET :: buf  ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+    
+    f_ptr = C_LOC(buf(1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5awrite_integer_1
+
+
+  SUBROUTINE h5awrite_integer_2(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN) , &
+         DIMENSION(dims(1),dims(2)), TARGET :: buf
+                                            ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5awrite_integer_2
+
+  SUBROUTINE h5awrite_integer_3(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2),dims(3)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5awrite_integer_3
+
+
+  SUBROUTINE h5awrite_integer_4(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims! Array to story buf dimension sizes
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5awrite_integer_4
+
+
+  SUBROUTINE h5awrite_integer_5(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5awrite_integer_5
+
+
+  SUBROUTINE h5awrite_integer_6(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1,1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5awrite_integer_6
+
+
+  SUBROUTINE h5awrite_integer_7(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)), &
+         TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1,1,1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5awrite_integer_7
+
+
+  SUBROUTINE h5awrite_real_scalar(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(IN), TARGET :: buf          ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf)
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5awrite_real_scalar
+
+  SUBROUTINE h5awrite_real_1(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1)), TARGET :: buf  ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5awrite_real_1
+
+
+  SUBROUTINE h5awrite_real_2(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2)), TARGET :: buf
+    ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5awrite_real_2
+
+
+  SUBROUTINE h5awrite_real_3(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3)), TARGET :: buf
+    ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5awrite_real_3
+
+
+  SUBROUTINE h5awrite_real_4(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)), TARGET :: buf
+    ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5awrite_real_4
+
+
+  SUBROUTINE h5awrite_real_5(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)), TARGET :: buf
+    ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf)
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5awrite_real_5
+
+
+  SUBROUTINE h5awrite_real_6(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)), TARGET :: buf
+    ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1,1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5awrite_real_6
+
+
+  SUBROUTINE h5awrite_real_7(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1,1,1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5awrite_real_7
+
+  SUBROUTINE h5awrite_char_scalar(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id               ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id            ! Attribute datatype
+                                                        !  identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims  ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(IN) :: buf                 ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr                      ! Error code
+
+    CALL h5awrite_char_scalar_fix(attr_id, memtype_id, buf, LEN(buf), dims, hdferr)
+
+  END SUBROUTINE h5awrite_char_scalar
+
+  SUBROUTINE h5awrite_char_scalar_fix(attr_id, memtype_id, buf, buf_len, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id               ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id            ! Attribute datatype
+                                                        !  identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims  ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN)  :: buf_len
+    CHARACTER(LEN=buf_len), INTENT(IN), TARGET :: buf   ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr                      ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1:1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5awrite_char_scalar_fix
+
+  SUBROUTINE h5awrite_char_1(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(IN), DIMENSION(dims(1)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1)(1:1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5awrite_char_1
+
+  SUBROUTINE h5awrite_char_2(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims  ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2)), TARGET :: buf  ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1)(1:1))
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5awrite_char_2
+
+  SUBROUTINE h5awrite_char_3(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1)(1:1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5awrite_char_3
+
+  SUBROUTINE h5awrite_char_4(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1)(1:1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5awrite_char_4
+
+  SUBROUTINE h5awrite_char_5(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1)(1:1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5awrite_char_5
+
+
+  SUBROUTINE h5awrite_char_6(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1,1)(1:1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5awrite_char_6
+
+  SUBROUTINE h5awrite_char_7(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1,1,1)(1:1))
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5awrite_char_7
+
+!****s* H5A (F03)/h5awrite_f_F03
+!
+! NAME
+!  h5awrite_f_F03
+!
+! PURPOSE
+!  Writes an attribute.
+!
+! Inputs:
+!  attr_id     - Attribute identifier
+!  memtype_id  - Attribute datatype identifier  (in memory)
+!  buf 	       - Data buffer; may be a scalar or an array
+!
+! Outputs:
+!  hdferr      - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces are added for
+!  called C functions (it is needed for Windows
+!  port).  February 27, 2001
+!
+! NOTES
+!  This function is overloaded to write INTEGER,
+!  REAL, DOUBLE PRECISION and CHARACTER buffers
+!  up to 7 dimensions.
+!
+! Fortran2003 Interface:
+!!  SUBROUTINE h5awrite_f(attr_id, memtype_id, buf, hdferr) 
+!!    INTEGER(HID_T)  , INTENT(IN)  :: attr_id
+!!    INTEGER(HID_T)  , INTENT(IN)  :: memtype_id
+!!    TYPE(C_PTR)     , INTENT(IN)  :: buf
+!!    INTEGER         , INTENT(OUT) :: hdferr
+!*****
+
+  SUBROUTINE h5awrite_ptr(attr_id, mem_type_id, buf, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id     ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    TYPE(C_PTR), INTENT(IN), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr            ! Error code
+
+    hdferr = h5awrite_f_c(attr_id, mem_type_id, buf)
+
+  END SUBROUTINE h5awrite_ptr
+
+!****s* H5A (F03)/h5aread_f_F90
+!
+! NAME
+!  h5aread_f_F90
+!
+! PURPOSE
+!  Reads an attribute.
+!
+! Inputs:
+!  attr_id     - Attribute identifier
+!  memtype_id  - Attribute datatype identifier  (in memory)
+!  dims        - Array to hold corresponding dimension sizes of data buffer buf;
+!                dim(k) has value of the k-th dimension of buffer buf;
+!                values are ignored if buf is a scalar
+!
+! Outputs:
+!  buf 	       - Data buffer; may be a scalar or an array
+!  hdferr      - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces are added for
+!  called C functions (it is needed for Windows
+!  port).  February 27, 2001
+!
+!  dims parameter was added to make code portable;
+!  Aprile 4, 2001
+!
+!  Changed buf intent to INOUT to be consistant
+!  with how the C functions handles it. The pg
+!  compiler will return 0 if a buf value is not set.
+!  February, 2008
+!
+! NOTES
+!  This function is overloaded to write INTEGER,
+!  REAL, DOUBLE PRECISION and CHARACTER buffers
+!  up to 7 dimensions.
+! Fortran90 Interface:
+!!  SUBROUTINE h5aread_f(attr_id, memtype_id, buf, dims, hdferr) 
+!!    INTEGER(HID_T)  , INTENT(IN)               :: attr_id
+!!    INTEGER(HID_T)  , INTENT(IN)               :: memtype_id
+!!    TYPE            , INTENT(INOUT)            :: buf
+!!    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+!!    INTEGER         , INTENT(OUT)              :: hdferr
+!*****
+  SUBROUTINE h5aread_integer_scalar(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(INOUT), TARGET :: buf              ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code 
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf)
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5aread_integer_scalar
+
+  SUBROUTINE h5aread_integer_1(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(INOUT), DIMENSION(dims(1)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1))
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5aread_integer_1
+
+
+  SUBROUTINE h5aread_integer_2(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(INOUT),DIMENSION(dims(1),dims(2)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1))
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5aread_integer_2
+
+
+  SUBROUTINE h5aread_integer_3(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1))
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5aread_integer_3
+
+
+  SUBROUTINE h5aread_integer_4(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1))
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5aread_integer_4
+
+
+  SUBROUTINE h5aread_integer_5(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1))
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5aread_integer_5
+
+
+  SUBROUTINE h5aread_integer_6(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1,1))
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5aread_integer_6
+
+
+  SUBROUTINE h5aread_integer_7(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1,1,1))
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5aread_integer_7
+
+
+  SUBROUTINE h5aread_real_scalar(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(INOUT), TARGET :: buf                 ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf)
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5aread_real_scalar
+
+  SUBROUTINE h5aread_real_1(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1)), TARGET :: buf  ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1))
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5aread_real_1
+
+
+  SUBROUTINE h5aread_real_2(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1))
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5aread_real_2
+
+
+  SUBROUTINE h5aread_real_3(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3)), TARGET :: buf
+                                            ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1))
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5aread_real_3
+
+
+  SUBROUTINE h5aread_real_4(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1))
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5aread_real_4
+
+
+  SUBROUTINE h5aread_real_5(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1))
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5aread_real_5
+
+
+  SUBROUTINE h5aread_real_6(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1,1))
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5aread_real_6
+
+
+  SUBROUTINE h5aread_real_7(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1,1,1))
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5aread_real_7
+
+  SUBROUTINE h5aread_char_scalar(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(INOUT) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+
+    CALL h5aread_char_scalar_fix(attr_id, memtype_id, buf, LEN(buf), dims, hdferr)
+
+  END SUBROUTINE h5aread_char_scalar
+
+  SUBROUTINE h5aread_char_scalar_fix(attr_id, memtype_id, buf, buf_len, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN)  :: buf_len
+    CHARACTER(LEN=buf_len), INTENT(INOUT), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1:1))
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5aread_char_scalar_fix
+
+  SUBROUTINE h5aread_char_1(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1)), TARGET :: buf  ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1)(1:1))
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5aread_char_1
+
+
+  SUBROUTINE h5aread_char_2(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2)), TARGET :: buf  ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1)(1:1))
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5aread_char_2
+
+
+  SUBROUTINE h5aread_char_3(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1)(1:1))
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5aread_char_3
+
+  SUBROUTINE h5aread_char_4(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1)(1:1))
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5aread_char_4
+
+  SUBROUTINE h5aread_char_5(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1)(1:1))
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5aread_char_5
+
+
+  SUBROUTINE h5aread_char_6(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1,1)(1:1))
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5aread_char_6
+
+
+  SUBROUTINE h5aread_char_7(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1,1,1)(1:1))
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5aread_char_7
+
+
+!****s* H5A (F03)/h5aread_f_F03
+!
+! NAME
+!  h5aread_f_F03
+!
+! PURPOSE
+!  Reads an attribute.
+!
+! Inputs:
+!  attr_id     - Attribute identifier
+!  memtype_id  - Attribute datatype identifier  (in memory)
+!
+! Outputs:
+!  buf 	       - Data buffer; may be a scalar or an array
+!  hdferr      - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces are added for
+!  called C functions (it is needed for Windows
+!  port).  February 27, 2001
+!
+!  dims parameter was added to make code portable;
+!  Aprile 4, 2001
+!
+!  Changed buf intent to INOUT to be consistant
+!  with how the C functions handles it. The pg
+!  compiler will return 0 if a buf value is not set.
+!  February, 2008
+!
+! NOTES
+!  This function is overloaded to write INTEGER,
+!  REAL, DOUBLE PRECISION and CHARACTER buffers
+!  up to 7 dimensions.
+! Fortran2003 Interface:
+!!  SUBROUTINE h5aread_f(attr_id, memtype_id, buf, hdferr) 
+!!    INTEGER(HID_T)  , INTENT(IN)    :: attr_id
+!!    INTEGER(HID_T)  , INTENT(IN)    :: memtype_id
+!!    TYPE(C_PTR)     , INTENT(INOUT) :: buf
+!!    INTEGER         , INTENT(OUT)   :: hdferr
+!*****
+
+  SUBROUTINE h5aread_ptr(attr_id, mem_type_id, buf, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id     ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    TYPE(C_PTR), INTENT(INOUT), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr            ! Error code
+
+    hdferr = h5aread_f_c(attr_id, mem_type_id, buf)
+
+  END SUBROUTINE h5aread_ptr
+
+END MODULE H5A_PROVISIONAL
+
+
diff --git a/fortran/src/H5Aff_F90.f90 b/fortran/src/H5Aff_F90.f90
new file mode 100644
index 0000000..7e14f7a
--- /dev/null
+++ b/fortran/src/H5Aff_F90.f90
@@ -0,0 +1,1618 @@
+!****h* ROBODoc/H5A (F90)
+!
+! NAME
+!  H5A_PROVISIONAL
+!
+! FILE
+!  fortran/src/H5Aff_F90.f90
+!
+! PURPOSE
+!
+!  This file contains Fortran 90 interfaces for H5A functions. It contains
+!  the same functions as H5Aff_F03.f90 but excludes the Fortran 2003 functions
+!  and the interface listings. This file will be compiled instead of H5Aff_F03.f90
+!  if Fortran 2003 functions are not 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 at hdfgroup.org.     *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! NOTES
+!                         *** IMPORTANT ***
+!  If you add a new H5A function 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 H5A_PROVISIONAL
+
+  USE H5GLOBAL
+  !
+  !On Windows there are no big (integer*8) integers, so overloading
+  !for bug #670 does not work. I have to use DEC compilation directives to make
+  !Windows DEC Visual Fortran and OSF compilers happy and do right things.
+  !						05/01/02 EP
+  !
+  INTERFACE h5awrite_f
+
+     MODULE PROCEDURE h5awrite_integer_scalar
+     MODULE PROCEDURE h5awrite_integer_1
+     MODULE PROCEDURE h5awrite_integer_2
+     MODULE PROCEDURE h5awrite_integer_3
+     MODULE PROCEDURE h5awrite_integer_4
+     MODULE PROCEDURE h5awrite_integer_5
+     MODULE PROCEDURE h5awrite_integer_6
+     MODULE PROCEDURE h5awrite_integer_7
+     MODULE PROCEDURE h5awrite_char_scalar
+     MODULE PROCEDURE h5awrite_char_1
+     MODULE PROCEDURE h5awrite_char_2
+     MODULE PROCEDURE h5awrite_char_3
+     MODULE PROCEDURE h5awrite_char_4
+     MODULE PROCEDURE h5awrite_char_5
+     MODULE PROCEDURE h5awrite_char_6
+     MODULE PROCEDURE h5awrite_char_7
+     MODULE PROCEDURE h5awrite_real_scalar
+     MODULE PROCEDURE h5awrite_real_1
+     MODULE PROCEDURE h5awrite_real_2
+     MODULE PROCEDURE h5awrite_real_3
+     MODULE PROCEDURE h5awrite_real_4
+     MODULE PROCEDURE h5awrite_real_5
+     MODULE PROCEDURE h5awrite_real_6
+     MODULE PROCEDURE h5awrite_real_7
+
+  END INTERFACE
+
+  INTERFACE h5aread_f
+
+     MODULE PROCEDURE h5aread_integer_scalar
+     MODULE PROCEDURE h5aread_integer_1
+     MODULE PROCEDURE h5aread_integer_2
+     MODULE PROCEDURE h5aread_integer_3
+     MODULE PROCEDURE h5aread_integer_4
+     MODULE PROCEDURE h5aread_integer_5
+     MODULE PROCEDURE h5aread_integer_6
+     MODULE PROCEDURE h5aread_integer_7
+     MODULE PROCEDURE h5aread_char_scalar
+     MODULE PROCEDURE h5aread_char_1
+     MODULE PROCEDURE h5aread_char_2
+     MODULE PROCEDURE h5aread_char_3
+     MODULE PROCEDURE h5aread_char_4
+     MODULE PROCEDURE h5aread_char_5
+     MODULE PROCEDURE h5aread_char_6
+     MODULE PROCEDURE h5aread_char_7
+     MODULE PROCEDURE h5aread_real_scalar
+     MODULE PROCEDURE h5aread_real_1
+     MODULE PROCEDURE h5aread_real_2
+     MODULE PROCEDURE h5aread_real_3
+     MODULE PROCEDURE h5aread_real_4
+     MODULE PROCEDURE h5aread_real_5
+     MODULE PROCEDURE h5aread_real_6
+     MODULE PROCEDURE h5aread_real_7
+  END INTERFACE
+
+CONTAINS
+
+  SUBROUTINE h5awrite_integer_scalar(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims  ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN) :: buf              ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+    INTERFACE
+       INTEGER FUNCTION h5awrite_integer_s_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_S_C'::h5awrite_integer_s_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         INTEGER, INTENT(IN)::buf
+       END FUNCTION h5awrite_integer_s_c
+    END INTERFACE
+
+    hdferr = h5awrite_integer_s_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_integer_scalar
+
+  SUBROUTINE h5awrite_integer_1(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN) , &
+         DIMENSION(dims(1)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr ! Error code
+    !            INTEGER, EXTERNAL :: h5awrite_integer_1_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awrite_integer_1_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_1_C'::h5awrite_integer_1_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         INTEGER, INTENT(IN), DIMENSION(dims(1)) :: buf
+       END FUNCTION h5awrite_integer_1_c
+    END INTERFACE
+
+    hdferr = h5awrite_integer_1_c(attr_id, memtype_id, buf, dims)
+
+  END SUBROUTINE h5awrite_integer_1
+
+
+  SUBROUTINE h5awrite_integer_2(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN) , &
+         DIMENSION(dims(1),dims(2)) :: buf  ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+    !            INTEGER, EXTERNAL :: h5awrite_integer_2_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awrite_integer_2_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_2_C'::h5awrite_integer_2_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2)) :: buf
+       END FUNCTION h5awrite_integer_2_c
+    END INTERFACE
+
+    hdferr = h5awrite_integer_2_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_integer_2
+
+
+  SUBROUTINE h5awrite_integer_3(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2),dims(3)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5awrite_integer_3_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awrite_integer_3_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_3_C'::h5awrite_integer_3_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2),dims(3)) :: buf
+       END FUNCTION h5awrite_integer_3_c
+    END INTERFACE
+
+    hdferr = h5awrite_integer_3_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_integer_3
+
+
+  SUBROUTINE h5awrite_integer_4(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+    !            INTEGER, EXTERNAL :: h5awrite_integer_4_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awrite_integer_4_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_4_C'::h5awrite_integer_4_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+       END FUNCTION h5awrite_integer_4_c
+    END INTERFACE
+
+    hdferr = h5awrite_integer_4_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_integer_4
+
+
+  SUBROUTINE h5awrite_integer_5(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5awrite_integer_5_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awrite_integer_5_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_5_C'::h5awrite_integer_5_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+       END FUNCTION h5awrite_integer_5_c
+    END INTERFACE
+
+    hdferr = h5awrite_integer_5_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_integer_5
+
+
+  SUBROUTINE h5awrite_integer_6(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+    !            INTEGER, EXTERNAL :: h5awrite_integer_6_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awrite_integer_6_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_6_C'::h5awrite_integer_6_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         INTEGER, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+       END FUNCTION h5awrite_integer_6_c
+    END INTERFACE
+
+    hdferr = h5awrite_integer_6_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_integer_6
+
+
+  SUBROUTINE h5awrite_integer_7(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5awrite_integer_7_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awrite_integer_7_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_7_C'::h5awrite_integer_7_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         INTEGER, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+       END FUNCTION h5awrite_integer_7_c
+    END INTERFACE
+
+    hdferr = h5awrite_integer_7_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_integer_7
+
+
+  SUBROUTINE h5awrite_real_scalar(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+    REAL, INTENT(IN) :: buf                  ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5awrite_real_s_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awrite_real_s_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_S_C'::h5awrite_real_s_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         REAL, INTENT(IN)::buf
+       END FUNCTION h5awrite_real_s_c
+    END INTERFACE
+
+    hdferr = h5awrite_real_s_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_real_scalar
+
+  SUBROUTINE h5awrite_real_1(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1)) :: buf  ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+    !            INTEGER, EXTERNAL :: h5awrite_real_1_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awrite_real_1_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_1_C'::h5awrite_real_1_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         REAL, INTENT(IN), &
+              DIMENSION(dims(1)) :: buf
+       END FUNCTION h5awrite_real_1_c
+    END INTERFACE
+
+    hdferr = h5awrite_real_1_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_real_1
+
+
+  SUBROUTINE h5awrite_real_2(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+
+    !            INTEGER, EXTERNAL :: h5awrite_real_2_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awrite_real_2_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_2_C'::h5awrite_real_2_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         REAL, INTENT(IN), &
+              DIMENSION(dims(1),dims(2)) :: buf
+       END FUNCTION h5awrite_real_2_c
+    END INTERFACE
+
+    hdferr = h5awrite_real_2_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_real_2
+
+
+  SUBROUTINE h5awrite_real_3(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5awrite_real_3_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awrite_real_3_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_3_C'::h5awrite_real_3_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         REAL, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3)) :: buf
+       END FUNCTION h5awrite_real_3_c
+    END INTERFACE
+
+    hdferr = h5awrite_real_3_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_real_3
+
+
+  SUBROUTINE h5awrite_real_4(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5awrite_real_4_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awrite_real_4_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_4_C'::h5awrite_real_4_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         REAL, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+       END FUNCTION h5awrite_real_4_c
+    END INTERFACE
+
+    hdferr = h5awrite_real_4_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_real_4
+
+
+  SUBROUTINE h5awrite_real_5(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5awrite_real_5_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awrite_real_5_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_5_C'::h5awrite_real_5_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         REAL, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+       END FUNCTION h5awrite_real_5_c
+    END INTERFACE
+
+    hdferr = h5awrite_real_5_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_real_5
+
+
+  SUBROUTINE h5awrite_real_6(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5awrite_real_6_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awrite_real_6_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_6_C'::h5awrite_real_6_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         REAL, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+       END FUNCTION h5awrite_real_6_c
+    END INTERFACE
+
+    hdferr = h5awrite_real_6_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_real_6
+
+
+  SUBROUTINE h5awrite_real_7(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5awrite_real_7_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awrite_real_7_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_7_C'::h5awrite_real_7_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         REAL, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+       END FUNCTION h5awrite_real_7_c
+    END INTERFACE
+
+    hdferr = h5awrite_real_7_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_real_7
+
+  SUBROUTINE h5awrite_char_scalar(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*),INTENT(IN) :: buf
+                                             ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    !            INTEGER, EXTERNAL :: h5awritec_s_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awritec_s_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITEC_S_C'::h5awritec_s_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         CHARACTER(LEN=*), INTENT(IN)::buf
+       END FUNCTION h5awritec_s_c
+    END INTERFACE
+
+    hdferr = h5awritec_s_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_char_scalar
+
+  SUBROUTINE h5awrite_char_1(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr ! Error code
+    !            INTEGER, EXTERNAL :: h5awritec_1_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awritec_1_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITEC_1_C'::h5awritec_1_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         CHARACTER(LEN=*), INTENT(IN), DIMENSION(dims(1))::buf
+       END FUNCTION h5awritec_1_c
+    END INTERFACE
+
+    hdferr = h5awritec_1_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_char_1
+
+
+  SUBROUTINE h5awrite_char_2(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2)) :: buf   ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5awritec_2_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awritec_2_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITEC_2_C'::h5awritec_2_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         CHARACTER(LEN=*), INTENT(IN), &
+              DIMENSION(dims(1),dims(2)) :: buf
+       END FUNCTION h5awritec_2_c
+    END INTERFACE
+
+    hdferr = h5awritec_2_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_char_2
+
+
+  SUBROUTINE h5awrite_char_3(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr ! Error code
+    !            INTEGER, EXTERNAL :: h5awritec_3_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awritec_3_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITEC_3_C'::h5awritec_3_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         CHARACTER(LEN=*), INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3)) :: buf
+       END FUNCTION h5awritec_3_c
+    END INTERFACE
+
+    hdferr = h5awritec_3_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_char_3
+
+
+  SUBROUTINE h5awrite_char_4(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    !            INTEGER, EXTERNAL :: h5awritec_4_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awritec_4_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITEC_4_C'::h5awritec_4_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         CHARACTER(LEN=*), INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+       END FUNCTION h5awritec_4_c
+    END INTERFACE
+
+    hdferr = h5awritec_4_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_char_4
+
+
+  SUBROUTINE h5awrite_char_5(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    !            INTEGER, EXTERNAL :: h5awritec_5_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awritec_5_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITEC_5_C'::h5awritec_5_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         CHARACTER(LEN=*), INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+       END FUNCTION h5awritec_5_c
+    END INTERFACE
+
+    hdferr = h5awritec_5_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_char_5
+
+
+  SUBROUTINE h5awrite_char_6(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    !            INTEGER, EXTERNAL :: h5awritec_6_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awritec_6_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITEC_6_C'::h5awritec_6_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         CHARACTER(LEN=*), INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+       END FUNCTION h5awritec_6_c
+    END INTERFACE
+
+    hdferr = h5awritec_6_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_char_6
+
+
+  SUBROUTINE h5awrite_char_7(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    !            INTEGER, EXTERNAL :: h5awritec_7_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awritec_7_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITEC_7_C'::h5awritec_7_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         CHARACTER(LEN=*), INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+       END FUNCTION h5awritec_7_c
+    END INTERFACE
+
+    hdferr = h5awritec_7_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_char_7
+
+!
+! NAME
+!  h5aread_f
+!
+! PURPOSE
+!  Reads an attribute.
+!
+! INPUTS
+!		attr_id		- attribute identifier
+!		memtype_id	- attribute memory type identifier
+!		dims		- 1D array of size 7, stores sizes of the
+!				- buf array dimensions.
+! OUTPUTS
+!		buf		- buffer to read attribute data in
+!		hdferr:		- error code
+!				 	Success:  0
+!				 	Failure: -1
+! OPTIONAL PARAMETERS
+!   NONE
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!
+!  Explicit Fortran interfaces are added for
+!  called C functions (it is needed for Windows
+!  port).  February 27, 2001
+!
+!  dims parameter was added to make code portable;
+!  April 4, 2001
+!
+!  Changed buf intent to INOUT to be consistant
+!  with how the C functions handles it. The pg
+!  compiler will return 0 if a buf value is not set.
+!  February, 2008
+!
+! NOTES
+!  This function is overloaded to write INTEGER,
+!  REAL, DOUBLE PRECISION and CHARACTER buffers
+!  up to 7 dimensions.
+!
+
+  SUBROUTINE h5aread_integer_scalar(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(INOUT) :: buf            ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5aread_integer_s_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5aread_integer_s_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_S_C'::h5aread_integer_s_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         INTEGER, INTENT(INOUT)::buf
+       END FUNCTION h5aread_integer_s_c
+    END INTERFACE
+    hdferr = h5aread_integer_s_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_integer_scalar
+
+  SUBROUTINE h5aread_integer_1(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(INOUT), DIMENSION(dims(1)) :: buf  ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5aread_integer_1_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5aread_integer_1_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_1_C'::h5aread_integer_1_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         INTEGER, INTENT(INOUT), DIMENSION(dims(1)) :: buf
+       END FUNCTION h5aread_integer_1_c
+    END INTERFACE
+
+    hdferr = h5aread_integer_1_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_integer_1
+
+
+  SUBROUTINE h5aread_integer_2(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(INOUT),DIMENSION(dims(1),dims(2)) :: buf  ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5aread_integer_2_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5aread_integer_2_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_2_C'::h5aread_integer_2_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         INTEGER, INTENT(INOUT), DIMENSION(dims(1),dims(2)) :: buf
+       END FUNCTION h5aread_integer_2_c
+    END INTERFACE
+
+    hdferr = h5aread_integer_2_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_integer_2
+
+
+  SUBROUTINE h5aread_integer_3(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5aread_integer_3_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5aread_integer_3_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_3_C'::h5aread_integer_3_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         INTEGER, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3)) :: buf
+       END FUNCTION h5aread_integer_3_c
+    END INTERFACE
+
+    hdferr = h5aread_integer_3_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_integer_3
+
+
+  SUBROUTINE h5aread_integer_4(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf ! Attribute data
+    ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5aread_integer_4_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5aread_integer_4_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_4_C'::h5aread_integer_4_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         INTEGER, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+       END FUNCTION h5aread_integer_4_c
+    END INTERFACE
+
+    hdferr = h5aread_integer_4_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_integer_4
+
+
+  SUBROUTINE h5aread_integer_5(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+    !            INTEGER, EXTERNAL :: h5aread_integer_5_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5aread_integer_5_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_5_C'::h5aread_integer_5_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         INTEGER, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+       END FUNCTION h5aread_integer_5_c
+    END INTERFACE
+
+    hdferr = h5aread_integer_5_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_integer_5
+
+
+  SUBROUTINE h5aread_integer_6(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5aread_integer_6_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5aread_integer_6_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_6_C'::h5aread_integer_6_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         INTEGER, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+       END FUNCTION h5aread_integer_6_c
+    END INTERFACE
+
+    hdferr = h5aread_integer_6_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_integer_6
+
+
+  SUBROUTINE h5aread_integer_7(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5aread_integer_7_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5aread_integer_7_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_7_C'::h5aread_integer_7_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         INTEGER, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+       END FUNCTION h5aread_integer_7_c
+    END INTERFACE
+
+    hdferr = h5aread_integer_7_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_integer_7
+
+
+  SUBROUTINE h5aread_real_scalar(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(INOUT) :: buf               ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5aread_real_s_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5aread_real_s_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_REAL_S_C'::h5aread_real_s_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         REAL, INTENT(INOUT)::buf
+       END FUNCTION h5aread_real_s_c
+    END INTERFACE
+
+    hdferr = h5aread_real_s_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_real_scalar
+
+  SUBROUTINE h5aread_real_1(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+    !            INTEGER, EXTERNAL :: h5aread_real_1_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5aread_real_1_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_REAL_1_C'::h5aread_real_1_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         REAL, INTENT(INOUT), &
+              DIMENSION(dims(1)) :: buf
+       END FUNCTION h5aread_real_1_c
+    END INTERFACE
+
+    hdferr = h5aread_real_1_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_real_1
+
+
+  SUBROUTINE h5aread_real_2(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2)) :: buf  ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+    !            INTEGER, EXTERNAL :: h5aread_real_2_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5aread_real_2_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_REAL_2_C'::h5aread_real_2_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         REAL, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2)) :: buf
+       END FUNCTION h5aread_real_2_c
+    END INTERFACE
+
+    hdferr = h5aread_real_2_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_real_2
+
+
+  SUBROUTINE h5aread_real_3(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3)) :: buf  ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr                  ! Error code
+
+    !            INTEGER, EXTERNAL :: h5aread_real_3_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5aread_real_3_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_REAL_3_C'::h5aread_real_3_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         REAL, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3)) :: buf
+       END FUNCTION h5aread_real_3_c
+    END INTERFACE
+
+    hdferr = h5aread_real_3_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_real_3
+
+
+  SUBROUTINE h5aread_real_4(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5aread_real_4_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5aread_real_4_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_REAL_4_C'::h5aread_real_4_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         REAL, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+       END FUNCTION h5aread_real_4_c
+    END INTERFACE
+
+    hdferr = h5aread_real_4_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_real_4
+
+
+  SUBROUTINE h5aread_real_5(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5aread_real_5_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5aread_real_5_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_REAL_5_C'::h5aread_real_5_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         REAL, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+       END FUNCTION h5aread_real_5_c
+    END INTERFACE
+
+    hdferr = h5aread_real_5_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_real_5
+
+
+  SUBROUTINE h5aread_real_6(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5aread_real_6_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5aread_real_6_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_REAL_6_C'::h5aread_real_6_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         REAL, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+       END FUNCTION h5aread_real_6_c
+    END INTERFACE
+
+    hdferr = h5aread_real_6_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_real_6
+
+
+  SUBROUTINE h5aread_real_7(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5aread_real_7_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5aread_real_7_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_REAL_7_C'::h5aread_real_7_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         REAL, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+       END FUNCTION h5aread_real_7_c
+    END INTERFACE
+
+    hdferr = h5aread_real_7_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_real_7
+
+  SUBROUTINE h5aread_char_scalar(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(INOUT) :: buf
+    ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5areadc_s_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5areadc_s_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREADC_S_C'::h5areadc_s_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         CHARACTER(LEN=*), INTENT(INOUT) :: buf
+       END FUNCTION h5areadc_s_c
+    END INTERFACE
+
+    hdferr = h5areadc_s_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_char_scalar
+
+  SUBROUTINE h5aread_char_1(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr ! Error code
+
+    !            INTEGER, EXTERNAL :: h5areadc_1_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5areadc_1_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREADC_1_C'::h5areadc_1_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         CHARACTER(LEN=*), INTENT(INOUT), &
+              DIMENSION(dims(1)) :: buf
+       END FUNCTION h5areadc_1_c
+    END INTERFACE
+
+    hdferr = h5areadc_1_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_char_1
+
+
+  SUBROUTINE h5aread_char_2(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr ! Error code
+
+    !            INTEGER, EXTERNAL :: h5areadc_2_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5areadc_2_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREADC_2_C'::h5areadc_2_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         CHARACTER(LEN=*), INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2)) :: buf
+       END FUNCTION h5areadc_2_c
+    END INTERFACE
+
+    hdferr = h5areadc_2_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_char_2
+
+
+  SUBROUTINE h5aread_char_3(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5areadc_3_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5areadc_3_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREADC_3_C'::h5areadc_3_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         CHARACTER(LEN=*), INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3)) :: buf
+       END FUNCTION h5areadc_3_c
+    END INTERFACE
+
+    hdferr = h5areadc_3_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_char_3
+
+
+  SUBROUTINE h5aread_char_4(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5areadc_4_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5areadc_4_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREADC_4_C'::h5areadc_4_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         CHARACTER(LEN=*), INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+       END FUNCTION h5areadc_4_c
+    END INTERFACE
+
+    hdferr = h5areadc_4_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_char_4
+
+
+  SUBROUTINE h5aread_char_5(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+    ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5areadc_5_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5areadc_5_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREADC_5_C'::h5areadc_5_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         CHARACTER(LEN=*), INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+       END FUNCTION h5areadc_5_c
+    END INTERFACE
+
+    hdferr = h5areadc_5_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_char_5
+
+
+  SUBROUTINE h5aread_char_6(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5areadc_6_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5areadc_6_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREADC_6_C'::h5areadc_6_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         CHARACTER(LEN=*), INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+       END FUNCTION h5areadc_6_c
+    END INTERFACE
+
+    hdferr = h5areadc_6_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_char_6
+
+
+  SUBROUTINE h5aread_char_7(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5areadc_7_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5areadc_7_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREADC_7_C'::h5areadc_7_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         CHARACTER(LEN=*), INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+       END FUNCTION h5areadc_7_c
+    END INTERFACE
+
+    hdferr = h5areadc_7_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_char_7
+
+END MODULE H5A_PROVISIONAL
+
+
diff --git a/fortran/src/H5Df.c b/fortran/src/H5Df.c
index 573315a..e1aa98e 100644
--- a/fortran/src/H5Df.c
+++ b/fortran/src/H5Df.c
@@ -1,4 +1,9 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+/****h* H5Df/H5Df
+ * PURPOSE
+ *   This file contains C stubs for H5D Fortran APIs
+ *
+ * COPYRIGHT
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * Copyright by The HDF Group.                                               *
  * Copyright by the Board of Trustees of the University of Illinois.         *
  * All rights reserved.                                                      *
@@ -11,32 +16,42 @@
  * 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 at hdfgroup.org.     *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/* This files contains C stubs for H5D Fortran APIs */
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ ******
+*/
 
 #include "H5f90.h"
 
-/*----------------------------------------------------------------------------
- * Name:        h5dcreate_c
- * Purpose:     Call H5Dcreate2 to create a dataset
- * Inputs:      loc_id - file or group identifier
+/****if* H5Df/h5dcreate_c
+ * NAME
+ *        h5dcreate_c
+ * PURPOSE
+ *     Call H5Dcreate2 to create a dataset
+ * INPUTS
+ *      loc_id - file or group identifier
  *              name - name of the dataset
  *              namelen - name length
  *              type_id - datatype identifier
  *              space_id - dataspace identifier
  *              crt_pr  - identifier of creation property list
- * Outputs:     dset_id - dataset identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     dset_id - dataset identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, August 4, 1999
- * Modifications:
+ * HISTORY
+ *
  *               - Added optional parameters introduced in version 1.8
  *                 February, 2008
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5dcreate_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *type_id, hid_t_f *space_id,
 	      hid_t_f *lcpl_id, hid_t_f *dcpl_id, hid_t_f *dapl_id, hid_t_f *dset_id)
+/******/
 {
      char *c_name = NULL;
      hid_t c_dset_id;
@@ -64,21 +79,30 @@ DONE:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5dopen_c
- * Purpose:     Call H5Dopen2 to open a dataset
- * Inputs:      loc_id - file or group identifier
+/****if* H5Df/h5dopen_c
+ * NAME
+ *        h5dopen_c
+ * PURPOSE
+ *     Call H5Dopen2 to open a dataset
+ * INPUTS
+ *      loc_id - file or group identifier
  *              name - name of the dataset
  *              namelen - name length
  *              dapl_id	- Dataset access property list
- * Outputs:     dset_id - dataset identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     dset_id - dataset identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, August 4, 1999
- * Modifications: Added 1.8 parameter: dapl_id
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * Added 1.8 parameter: dapl_id
+ * SOURCE
+*/
 int_f
 nh5dopen_c(hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *dapl_id, hid_t_f *dset_id)
+/******/
 {
      char *c_name = NULL;
      hid_t c_dset_id;
@@ -105,24 +129,33 @@ DONE:
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5dwritec_c
- * Purpose:     Call h5dwrite_c to write a dataset of characters
- * Inputs:      dset_id - dataset identifier
+
+/****if* H5Df/h5dwritec_c
+ * NAME
+ *        h5dwritec_c
+ * PURPOSE
+ *     Call h5dwrite_c to write a dataset of characters
+ * INPUTS
+ *      dset_id - dataset identifier
  *              mem_type_id - memory datatype identifier
  *              mem_space_id - memory dataspace identifier
  *              file_space_id - memory dataspace identifier
  *              xfer_pr  - identifier of transfer property list
  *              buf      - character data buffer
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Tuesday, May 14, 2002
- * Modifications: This function is added to accomodate oveloaded h5dwrite_f
+ * HISTORY
+ * This function is added to accomodate oveloaded h5dwrite_f
  *                with the dims argument being of INTEGER(HSIZE_T) type
 
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5dwritec_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+/******/
 {
      int ret_value = -1;
 
@@ -136,6 +169,7 @@ nh5dwritec_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid
 
 int_f
 nh5dwritec_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+
 {
      int ret_value = -1;
 
@@ -149,6 +183,7 @@ nh5dwritec_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, h
 
 int_f
 nh5dwritec_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+
 {
      int ret_value = -1;
 
@@ -162,6 +197,7 @@ nh5dwritec_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, h
 
 int_f
 nh5dwritec_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+
 {
      int ret_value = -1;
 
@@ -175,6 +211,7 @@ nh5dwritec_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, h
 
 int_f
 nh5dwritec_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+
 {
      int ret_value = -1;
 
@@ -188,6 +225,7 @@ nh5dwritec_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, h
 
 int_f
 nh5dwritec_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+
 {
      int ret_value = -1;
 
@@ -201,6 +239,7 @@ nh5dwritec_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, h
 
 int_f
 nh5dwritec_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+
 {
      int ret_value = -1;
 
@@ -214,6 +253,7 @@ nh5dwritec_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, h
 
 int_f
 nh5dwritec_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+
 {
      int ret_value = -1;
 
@@ -227,6 +267,7 @@ nh5dwritec_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, h
 
 int_f
 nh5dwritec_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+
 {
      int ret_value = -1;
 
@@ -238,19 +279,25 @@ nh5dwritec_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, h
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5dwrite_c
- * Purpose:     Call H5Dwrite to write a dataset
- * Inputs:      dset_id - dataset identifier
+/****if* H5Df/h5dwrite_c
+ * NAME
+ *        h5dwrite_c
+ * PURPOSE
+ *     Call H5Dwrite to write a dataset
+ * INPUTS
+ *      dset_id - dataset identifier
  *              mem_type_id - memory datatype identifier
  *              mem_space_id - memory dataspace identifier
  *              file_space_id - memory dataspace identifier
  *              xfer_pr  - identifier of transfer property list
  *              buf      - data buffer
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Tuesday, May 14, 2002
- * Modifications: This function is added to accomodate oveloaded h5dwrite_f
+ * HISTORY
+ * This function is added to accomodate oveloaded h5dwrite_f
  *                with the dims argument being of INTEGER(HSIZE_T) type
  *
  *                Added nh5dwrite_integer(real,double)_s,1-7_c functions to eliminate
@@ -258,9 +305,11 @@ nh5dwritec_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, h
  *                called by Fortran rouitnes
  *                                           October 10, 2006 EIP
  *
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5dwrite_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f UNUSED *dims)
+/******/
 {
      int ret_value = -1;
      herr_t ret;
@@ -291,6 +340,7 @@ nh5dwrite_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_
 
 int_f
 nh5dwrite_integer_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -301,6 +351,7 @@ nh5dwrite_integer_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_spac
 
 int_f
 nh5dwrite_integer_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -311,6 +362,7 @@ nh5dwrite_integer_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_spac
 
 int_f
 nh5dwrite_integer_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -321,6 +373,7 @@ nh5dwrite_integer_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_spac
 
 int_f
 nh5dwrite_integer_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -331,6 +384,7 @@ nh5dwrite_integer_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_spac
 
 int_f
 nh5dwrite_integer_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -341,6 +395,7 @@ nh5dwrite_integer_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_spac
 
 int_f
 nh5dwrite_integer_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -351,6 +406,7 @@ nh5dwrite_integer_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_spac
 
 int_f
 nh5dwrite_integer_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -361,6 +417,7 @@ nh5dwrite_integer_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_spac
 
 int_f
 nh5dwrite_integer_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -371,6 +428,7 @@ nh5dwrite_integer_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_spac
 
 int_f
 nh5dwrite_real_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -380,6 +438,7 @@ nh5dwrite_real_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_i
 
 int_f
 nh5dwrite_real_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -389,6 +448,7 @@ nh5dwrite_real_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_i
 
 int_f
 nh5dwrite_real_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -398,6 +458,7 @@ nh5dwrite_real_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_i
 
 int_f
 nh5dwrite_real_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -407,6 +468,7 @@ nh5dwrite_real_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_i
 
 int_f
 nh5dwrite_real_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -416,6 +478,7 @@ nh5dwrite_real_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_i
 
 int_f
 nh5dwrite_real_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -425,6 +488,7 @@ nh5dwrite_real_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_i
 
 int_f
 nh5dwrite_real_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -434,6 +498,7 @@ nh5dwrite_real_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_i
 
 int_f
 nh5dwrite_real_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -443,6 +508,7 @@ nh5dwrite_real_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_i
 
 int_f
 nh5dwrite_double_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -452,6 +518,7 @@ nh5dwrite_double_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space
 
 int_f
 nh5dwrite_double_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -461,6 +528,7 @@ nh5dwrite_double_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space
 
 int_f
 nh5dwrite_double_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -470,6 +538,7 @@ nh5dwrite_double_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space
 
 int_f
 nh5dwrite_double_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -479,6 +548,7 @@ nh5dwrite_double_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space
 
 int_f
 nh5dwrite_double_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -488,6 +558,7 @@ nh5dwrite_double_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space
 
 int_f
 nh5dwrite_double_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -497,6 +568,7 @@ nh5dwrite_double_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space
 
 int_f
 nh5dwrite_double_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -506,6 +578,7 @@ nh5dwrite_double_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space
 
 int_f
 nh5dwrite_double_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -514,24 +587,32 @@ nh5dwrite_double_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5dwrite_ref_obj_c
- * Purpose:     Call H5Dwrite to write a dataset  of object references
- * Inputs:      dset_id - dataset identifier
+/****if* H5Df/h5dwrite_ref_obj_c
+ * NAME
+ *        h5dwrite_ref_obj_c
+ * PURPOSE
+ *     Call H5Dwrite to write a dataset  of object references
+ * INPUTS
+ *      dset_id - dataset identifier
  *              mem_type_id - memory datatype identifier
  *              mem_space_id - memory dataspace identifier
  *              file_space_id - memory dataspace identifier
  *              xfer_pr  - identifier of transfer property list
  *              buf      - data buffer with references to the objects.
  *              n - number of references to be stored.
- * Returns:     0 on success,e-1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success,e-1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Tuesday, May 14, 2002
- * Modifications: This function was added to accomodate h5dwrite_f with the
+ * HISTORY
+ * This function was added to accomodate h5dwrite_f with the
  *                dims argumnet being of INTEGER(HSIZE_T) type.
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5dwrite_ref_obj_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, haddr_t_f *buf, hsize_t_f *dims)
+/******/
 {
     int ret_value = -1;
     herr_t ret;
@@ -573,24 +654,32 @@ nh5dwrite_ref_obj_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5dwrite_ref_reg_c
- * Purpose:     Call H5Dwrite to write a dataset of dataset region references
- * Inputs:      dset_id - dataset identifier
+/****if* H5Df/h5dwrite_ref_reg_c
+ * NAME
+ *        h5dwrite_ref_reg_c
+ * PURPOSE
+ *     Call H5Dwrite to write a dataset of dataset region references
+ * INPUTS
+ *      dset_id - dataset identifier
  *              mem_type_id - memory datatype identifier
  *              mem_space_id - memory dataspace identifier
  *              file_space_id - memory dataspace identifier
  *              xfer_pr  - identifier of transfer property list
  *              buf      - data buffer with references to the objects.
  *              n - number of references to be stored.
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Tuesday, May 14, 2002
- * Modifications: This function was added to accomodate h5dwrite_f with the
+ * HISTORY
+ * This function was added to accomodate h5dwrite_f with the
  *                dims argument being of INTEGER(HSIZE_T) type
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5dwrite_ref_reg_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, int_f *buf, hsize_t_f *dims)
+/******/
 {
      int ret_value = -1;
      herr_t ret;
@@ -637,23 +726,32 @@ nh5dwrite_ref_reg_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_
 
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5dreadc_c
- * Purpose:     Call h5dread_c to read a dataset of characters
- * Inputs:      dset_id - dataset identifier
+/****if* H5Df/h5dreadc_c
+ * NAME
+ *        h5dreadc_c
+ * PURPOSE
+ *     Call h5dread_c to read a dataset of characters
+ * INPUTS
+ *      dset_id - dataset identifier
  *              mem_type_id - memory datatype identifier
  *              mem_space_id - memory dataspace identifier
  *              file_space_id - memory dataspace identifier
  *              xfer_pr  - identifier of transfer property list
- * Outputs:     buf      - character data buffer
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     buf      - character data buffer
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, May 15, 2002
- * Modifications: This function was added to accomodate h5dread_f subroutine
+ * HISTORY
+ * This function was added to accomodate h5dread_f subroutine
  *                with the dims parameter being of INTEGER(HSIZE_T_F) size.
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5dreadc_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+/******/
 {
      int ret_value = -1;
 
@@ -667,6 +765,7 @@ nh5dreadc_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_
 
 int_f
 nh5dreadc_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+
 {
      int ret_value = -1;
 
@@ -680,6 +779,7 @@ nh5dreadc_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hi
 
 int_f
 nh5dreadc_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+
 {
      int ret_value = -1;
 
@@ -693,6 +793,7 @@ nh5dreadc_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hi
 
 int_f
 nh5dreadc_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+
 {
      int ret_value = -1;
 
@@ -706,6 +807,7 @@ nh5dreadc_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hi
 
 int_f
 nh5dreadc_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+
 {
      int ret_value = -1;
 
@@ -719,6 +821,7 @@ nh5dreadc_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hi
 
 int_f
 nh5dreadc_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+
 {
      int ret_value = -1;
 
@@ -732,6 +835,7 @@ nh5dreadc_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hi
 
 int_f
 nh5dreadc_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+
 {
      int ret_value = -1;
 
@@ -745,6 +849,7 @@ nh5dreadc_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hi
 
 int_f
 nh5dreadc_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+
 {
      int ret_value = -1;
 
@@ -758,6 +863,7 @@ nh5dreadc_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hi
 
 int_f
 nh5dreadc_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+
 {
      int ret_value = -1;
 
@@ -769,19 +875,26 @@ nh5dreadc_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hi
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5dread_c
- * Purpose:     Call H5Draed to read a dataset
- * Inputs:      dset_id - dataset identifier
+/****if* H5Df/h5dread_c
+ * NAME
+ *        h5dread_c
+ * PURPOSE
+ *     Call H5Draed to read a dataset
+ * INPUTS
+ *      dset_id - dataset identifier
  *              mem_type_id - memory datatype identifier
  *              mem_space_id - memory dataspace identifier
  *              file_space_id - memory dataspace identifier
  *              xfer_pr  - identifier of transfer property list
- * Outputs:     buf      - data buffer
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     buf      - data buffer
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, May 15, 2002
- * Modifications: This function was added to accomodate h5dread_f subroutine
+ * HISTORY
+ * This function was added to accomodate h5dread_f subroutine
  *                with the dims parameter being of INTEGER(HSIZE_T_F) size.
  *
  *                Added nh5dread_integer(real,double)_s,1-7_c functions to eliminate
@@ -789,9 +902,11 @@ nh5dreadc_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hi
  *                called by Fortran rouitnes
  *                                           October 10, 2006 EIP
  *
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5dread_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f UNUSED *dims)
+/******/
 {
      int ret_value = -1;
      herr_t ret;
@@ -822,6 +937,7 @@ nh5dread_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t
 
 int_f
 nh5dread_integer_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -831,6 +947,7 @@ nh5dread_integer_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space
 
 int_f
 nh5dread_integer_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -840,6 +957,7 @@ nh5dread_integer_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space
 
 int_f
 nh5dread_integer_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -849,6 +967,7 @@ nh5dread_integer_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space
 
 int_f
 nh5dread_integer_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -858,6 +977,7 @@ nh5dread_integer_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space
 
 int_f
 nh5dread_integer_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -867,6 +987,7 @@ nh5dread_integer_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space
 
 int_f
 nh5dread_integer_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -876,6 +997,7 @@ nh5dread_integer_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space
 
 int_f
 nh5dread_integer_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -885,6 +1007,7 @@ nh5dread_integer_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space
 
 int_f
 nh5dread_integer_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -894,6 +1017,7 @@ nh5dread_integer_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space
 
 int_f
 nh5dread_real_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -903,6 +1027,7 @@ nh5dread_real_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id
 
 int_f
 nh5dread_real_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -912,6 +1037,7 @@ nh5dread_real_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id
 
 int_f
 nh5dread_real_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -921,6 +1047,7 @@ nh5dread_real_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id
 
 int_f
 nh5dread_real_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -930,6 +1057,7 @@ nh5dread_real_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id
 
 int_f
 nh5dread_real_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -939,6 +1067,7 @@ nh5dread_real_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id
 
 int_f
 nh5dread_real_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -948,6 +1077,7 @@ nh5dread_real_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id
 
 int_f
 nh5dread_real_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -957,6 +1087,7 @@ nh5dread_real_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id
 
 int_f
 nh5dread_real_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -966,6 +1097,7 @@ nh5dread_real_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id
 
 int_f
 nh5dread_double_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -975,6 +1107,7 @@ nh5dread_double_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_
 
 int_f
 nh5dread_double_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -984,6 +1117,7 @@ nh5dread_double_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_
 
 int_f
 nh5dread_double_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -993,6 +1127,7 @@ nh5dread_double_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_
 
 int_f
 nh5dread_double_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -1002,6 +1137,7 @@ nh5dread_double_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_
 
 int_f
 nh5dread_double_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -1011,6 +1147,7 @@ nh5dread_double_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_
 
 int_f
 nh5dread_double_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -1020,6 +1157,7 @@ nh5dread_double_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_
 
 int_f
 nh5dread_double_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -1029,6 +1167,7 @@ nh5dread_double_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_
 
 int_f
 nh5dread_double_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -1036,24 +1175,32 @@ nh5dread_double_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_
      return nh5dread_c(dset_id, mem_type_id, mem_space_id, file_space_id, xfer_prp, buf, dims);
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5dread_ref_obj_c
- * Purpose:     Call H5Dread to read a dataset  of object references
- * Inputs:      dset_id - dataset identifier
+/****if* H5Df/h5dread_ref_obj_c
+ * NAME
+ *        h5dread_ref_obj_c
+ * PURPOSE
+ *     Call H5Dread to read a dataset  of object references
+ * INPUTS
+ *      dset_id - dataset identifier
  *              mem_type_id - memory datatype identifier
  *              mem_space_id - memory dataspace identifier
  *              file_space_id - memory dataspace identifier
  *              xfer_pr  - identifier of transfer property list
  *              buf      - data buffer to store references to the objects.
  *              n - number of references to be stored.
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, May 15, 2002
- * Modifications: This function was added to accomodate h5dread_f subroutine
+ * HISTORY
+ * This function was added to accomodate h5dread_f subroutine
  *                with the dims parameter being of INTEGER(HSIZE_T_F) size.
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5dread_ref_obj_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, haddr_t_f * buf, hsize_t_f *dims)
+/******/
 {
     int ret_value = -1;
     herr_t ret = -1;
@@ -1095,24 +1242,32 @@ nh5dread_ref_obj_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_i
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5dread_ref_reg_c
- * Purpose:     Call H5Dread to read a dataset of dataset region references
- * Inputs:      dset_id - dataset identifier
+/****if* H5Df/h5dread_ref_reg_c
+ * NAME
+ *        h5dread_ref_reg_c
+ * PURPOSE
+ *     Call H5Dread to read a dataset of dataset region references
+ * INPUTS
+ *      dset_id - dataset identifier
  *              mem_type_id - memory datatype identifier
  *              mem_space_id - memory dataspace identifier
  *              file_space_id - memory dataspace identifier
  *              xfer_pr  - identifier of transfer property list
  *              buf      - data buffer to store references to the objects.
  *              n - number of references to be stored.
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, May 15, 2002
- * Modifications: This function was added to accomodate h5dread_f subroutine
+ * HISTORY
+ * This function was added to accomodate h5dread_f subroutine
  *                with the dims parameter being of INTEGER(HSIZE_T_F) size.
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5dread_ref_reg_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, int_f * buf, hsize_t_f *dims)
+/******/
 {
      int ret_value = -1;
      herr_t ret = -1;
@@ -1157,18 +1312,26 @@ nh5dread_ref_reg_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_i
 
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5dclose_c
- * Purpose:     Call H5Dclose to close a dataset
- * Inputs:      dset_id - identifier of the dataset to be closed
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Df/h5dclose_c
+ * NAME
+ *        h5dclose_c
+ * PURPOSE
+ *     Call H5Dclose to close a dataset
+ * INPUTS
+ *      dset_id - identifier of the dataset to be closed
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, August 4, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5dclose_c ( hid_t_f *dset_id )
+/******/
 {
   int ret_value = 0;
   hid_t c_dset_id;
@@ -1177,19 +1340,28 @@ nh5dclose_c ( hid_t_f *dset_id )
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5dget_space_c
- * Purpose:     Call H5Dget_space to obtain dataspace of a dataset
- * Inputs:      dset_id - identifier of the dataset
- * Outputs:     space_id - identifier of the dataset's dataspace
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Df/h5dget_space_c
+ * NAME
+ *        h5dget_space_c
+ * PURPOSE
+ *     Call H5Dget_space to obtain dataspace of a dataset
+ * INPUTS
+ *      dset_id - identifier of the dataset
+ * OUTPUTS
+ *     space_id - identifier of the dataset's dataspace
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, August 19, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5dget_space_c ( hid_t_f *dset_id , hid_t_f *space_id)
+/******/
 {
   int ret_value = -1;
   hid_t c_dset_id;
@@ -1203,19 +1375,28 @@ nh5dget_space_c ( hid_t_f *dset_id , hid_t_f *space_id)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5dget_type_c
- * Purpose:     Call H5Dget_type to obtain datatype of a dataset
- * Inputs:      dset_id - identifier of the dataset
- * Outputs:     type_id - identifier of the dataset's datatype
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Df/h5dget_type_c
+ * NAME
+ *        h5dget_type_c
+ * PURPOSE
+ *     Call H5Dget_type to obtain datatype of a dataset
+ * INPUTS
+ *      dset_id - identifier of the dataset
+ * OUTPUTS
+ *     type_id - identifier of the dataset's datatype
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, August 19, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5dget_type_c ( hid_t_f *dset_id , hid_t_f *type_id)
+/******/
 {
   int ret_value = -1;
   hid_t c_dset_id;
@@ -1231,20 +1412,29 @@ nh5dget_type_c ( hid_t_f *dset_id , hid_t_f *type_id)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5dget_create_plist_c
- * Purpose:     Call H5Dget_create_plist to obtain creation property list
+/****if* H5Df/h5dget_create_plist_c
+ * NAME
+ *        h5dget_create_plist_c
+ * PURPOSE
+ *     Call H5Dget_create_plist to obtain creation property list
  *              of a dataset
- * Inputs:      dset_id - identifier of the dataset
- * Outputs:     plist_id - identifier of he dataset creation property list
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * INPUTS
+ *      dset_id - identifier of the dataset
+ * OUTPUTS
+ *     plist_id - identifier of he dataset creation property list
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, August 19, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5dget_create_plist_c ( hid_t_f *dset_id , hid_t_f *plist_id)
+/******/
 {
   int ret_value = -1;
   hid_t c_dset_id;
@@ -1261,22 +1451,31 @@ nh5dget_create_plist_c ( hid_t_f *dset_id , hid_t_f *plist_id)
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5dset_extent_c
- * Purpose:     Call H5Dset_extent to extend dataset with unlimited dimensions
- * Inputs:      dset_id - identifier of the dataset
- * Outputs:     dims - array with the dimension sizes
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Df/h5dset_extent_c
+ * NAME
+ *        h5dset_extent_c
+ * PURPOSE
+ *     Call H5Dset_extent to extend dataset with unlimited dimensions
+ * INPUTS
+ *      dset_id - identifier of the dataset
+ * OUTPUTS
+ *     dims - array with the dimension sizes
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, August 19, 1999
  *
- * Modifications: Changed name from the now obsolete h5dextend
+ * HISTORY
+ * Changed name from the now obsolete h5dextend
  *                to h5dset_extent in order to match new fortran interface.
  *                -MSB- March 14, 2008
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 
 int_f
 nh5dset_extent_c ( hid_t_f *dset_id , hsize_t_f *dims)
+/******/
 {
   hid_t c_space_id;
   hsize_t c_dims[H5S_MAX_RANK];
@@ -1305,20 +1504,29 @@ nh5dset_extent_c ( hid_t_f *dset_id , hsize_t_f *dims)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        nh5dget_storage_size_c
- * Purpose:     Call H5Dget_storage_size to return the amount of storage
+/****if* H5Df/nh5dget_storage_size_c
+ * NAME
+ *        nh5dget_storage_size_c
+ * PURPOSE
+ *     Call H5Dget_storage_size to return the amount of storage
  *              required for a dataset
- * Inputs:      dset_id - identifier of the dataset
- * Outputs:     size    - the amount of storage required for a dataset
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * INPUTS
+ *      dset_id - identifier of the dataset
+ * OUTPUTS
+ *     size    - the amount of storage required for a dataset
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Tuesday, October 22, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5dget_storage_size_c ( hid_t_f *dset_id , hsize_t_f *size)
+/******/
 {
   int ret_value = -1;
   hsize_t c_size;
@@ -1332,21 +1540,30 @@ nh5dget_storage_size_c ( hid_t_f *dset_id , hsize_t_f *size)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        nh5dvlen_get_max_len_c
- * Purpose:     Get the maximum size of the VL dataset element
- * Inputs:      dset_id - identifier of the dataset
+/****if* H5Df/nh5dvlen_get_max_len_c
+ * NAME
+ *        nh5dvlen_get_max_len_c
+ * PURPOSE
+ *     Get the maximum size of the VL dataset element
+ * INPUTS
+ *      dset_id - identifier of the dataset
  *              type_id - datatype identifier
  *              space_id - dataspace identifier
- * Outputs:     len      - maximum length of the VL dataset element
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     len      - maximum length of the VL dataset element
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Tuesday, October 22, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5dvlen_get_max_len_c ( hid_t_f *dset_id ,  hid_t_f *type_id, hid_t_f *space_id, size_t_f *len)
+/******/
 {
   int ret_value = -1;
   size_t c_len;
@@ -1381,10 +1598,13 @@ DONE:
   free(c_buf);
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        nh5dwrite_vl_integer_c
- * Purpose:     Write variable length dataset
- * Inputs:      dset_id - identifier of the dataset
+/****if* H5Df/nh5dwrite_vl_integer_c
+ * NAME
+ *        nh5dwrite_vl_integer_c
+ * PURPOSE
+ *     Write variable length dataset
+ * INPUTS
+ *      dset_id - identifier of the dataset
  *              mem_type_id - datatype identifier
  *              mem_space_id - dataspace identifier
  *              file_space_id - file dataspace identifier
@@ -1394,14 +1614,19 @@ DONE:
  *                              dims[0] = MAXLENGTH
  *                              dims[1] = number of elements of VL type
  *              len           - array element lenghts
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, October 23, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5dwrite_vl_integer_c ( hid_t_f *dset_id ,  hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, int_f *buf, hsize_t_f *dims, size_t_f *len)
+/******/
 {
   int ret_value = -1;
   hid_t c_dset_id;
@@ -1446,10 +1671,13 @@ DONE:
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        nh5dread_vl_integer_c
- * Purpose:     Read variable length dataset
- * Inputs:      dset_id - identifier of the dataset
+/****if* H5Df/nh5dread_vl_integer_c
+ * NAME
+ *        nh5dread_vl_integer_c
+ * PURPOSE
+ *     Read variable length dataset
+ * INPUTS
+ *      dset_id - identifier of the dataset
  *              mem_type_id - datatype identifier
  *              mem_space_id - dataspace identifier
  *              file_space_id - file dataspace identifier
@@ -1457,16 +1685,22 @@ DONE:
  *              dims          - one-demnsional array of size 2
  *                              dims[0] = MAXLENGTH
  *                              dims[1] = number of elements of VL type
- * Outputs:     buf           - data buffer
+ * OUTPUTS
+ *     buf           - data buffer
  *              len           - array element lenghts
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, October 24, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5dread_vl_integer_c ( hid_t_f *dset_id ,  hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, int_f *buf, hsize_t_f *dims, size_t_f *len)
+/******/
 {
   int ret_value = -1;
   hid_t c_dset_id;
@@ -1509,10 +1743,13 @@ DONE:
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        nh5dwrite_vl_string_c
- * Purpose:     Write variable length strings from Fortran program
- * Inputs:      dset_id - identifier of the dataset
+/****if* H5Df/nh5dwrite_vl_string_c
+ * NAME
+ *        nh5dwrite_vl_string_c
+ * PURPOSE
+ *     Write variable length strings from Fortran program
+ * INPUTS
+ *      dset_id - identifier of the dataset
  *              mem_type_id - datatype identifier
  *              mem_space_id - dataspace identifier
  *              file_space_id - file dataspace identifier
@@ -1521,14 +1758,19 @@ DONE:
  *              dims          - one-demnsional array of size 2
  *                              dims[0] = number of strings of size max_len
  *              len           - array of strings lengths
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Monday, October 28, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5dwrite_vl_string_c( hid_t_f *dset_id ,  hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims, size_t_f *len)
+/******/
 {
   int ret_value = -1;
   hid_t c_dset_id;
@@ -1588,10 +1830,13 @@ DONE:
   free(tmp);
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        nh5dread_vl_string_c
- * Purpose:     Read variable length strings from Fortran program
- * Inputs:      dset_id - identifier of the dataset
+/****if* H5Df/nh5dread_vl_string_c
+ * NAME
+ *        nh5dread_vl_string_c
+ * PURPOSE
+ *     Read variable length strings from Fortran program
+ * INPUTS
+ *      dset_id - identifier of the dataset
  *              mem_type_id - datatype identifier
  *              mem_space_id - dataspace identifier
  *              file_space_id - file dataspace identifier
@@ -1600,14 +1845,19 @@ DONE:
  *                              dims[0] = number of strings of size max_len
  * Output:      buf           - data buffer
  *              len           - array of strings lengths
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Friday, November 1, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5dread_vl_string_c( hid_t_f *dset_id ,  hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims, size_t_f *len)
+/******/
 {
   int ret_value = -1;
   hid_t c_dset_id;
@@ -1663,10 +1913,13 @@ nh5dread_vl_string_c( hid_t_f *dset_id ,  hid_t_f *mem_type_id, hid_t_f *mem_spa
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        nh5dwrite_vl_real_c
- * Purpose:     Write variable length dataset
- * Inputs:      dset_id - identifier of the dataset
+/****if* H5Df/nh5dwrite_vl_real_c
+ * NAME
+ *        nh5dwrite_vl_real_c
+ * PURPOSE
+ *     Write variable length dataset
+ * INPUTS
+ *      dset_id - identifier of the dataset
  *              mem_type_id - datatype identifier
  *              mem_space_id - dataspace identifier
  *              file_space_id - file dataspace identifier
@@ -1676,14 +1929,19 @@ nh5dread_vl_string_c( hid_t_f *dset_id ,  hid_t_f *mem_type_id, hid_t_f *mem_spa
  *                              dims[0] = MAXLENGTH
  *                              dims[1] = number of elements of VL type
  *              len           - array element lenghts
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Monday, November 11, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5dwrite_vl_real_c ( hid_t_f *dset_id ,  hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, real_f *buf, hsize_t_f *dims, size_t_f *len)
+/******/
 {
   int ret_value = -1;
   hid_t c_dset_id;
@@ -1728,10 +1986,13 @@ DONE:
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        nh5dread_vl_real_c
- * Purpose:     Read variable length dataset
- * Inputs:      dset_id - identifier of the dataset
+/****if* H5Df/nh5dread_vl_real_c
+ * NAME
+ *        nh5dread_vl_real_c
+ * PURPOSE
+ *     Read variable length dataset
+ * INPUTS
+ *      dset_id - identifier of the dataset
  *              mem_type_id - datatype identifier
  *              mem_space_id - dataspace identifier
  *              file_space_id - file dataspace identifier
@@ -1739,16 +2000,22 @@ DONE:
  *              dims          - one-demnsional array of size 2
  *                              dims[0] = MAXLENGTH
  *                              dims[1] = number of elements of VL type
- * Outputs:     buf           - data buffer
+ * OUTPUTS
+ *     buf           - data buffer
  *              len           - array element lenghts
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Monday, November 11, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5dread_vl_real_c ( hid_t_f *dset_id ,  hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, real_f *buf, hsize_t_f *dims, size_t_f *len)
+/******/
 {
   int ret_value = -1;
   hid_t c_dset_id;
@@ -1792,21 +2059,29 @@ DONE:
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5dfillc_c
- * Purpose:     Call h5fill_c to fill memory buffer with a fill value
- * Inputs:      fill_value - fill value
+/****if* H5Df/h5dfillc_c
+ * NAME
+ *        h5dfillc_c
+ * PURPOSE
+ *     Call h5fill_c to fill memory buffer with a fill value
+ * INPUTS
+ *      fill_value - fill value
  *              fill_type_id - fill value datatype identifier
  *              space_id - memory space selection identifier
  *              buf      - memory buffer to fill
  *              mem_type_id - memory buffer dtatype identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, March 12, 2003
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5dfillc_c (_fcd fill_value, hid_t_f *fill_type_id, hid_t_f *space_id, _fcd buf, hid_t_f *mem_type_id)
+/******/
 {
      int ret_value = -1;
 
@@ -1817,22 +2092,29 @@ nh5dfillc_c (_fcd fill_value, hid_t_f *fill_type_id, hid_t_f *space_id, _fcd buf
 
      return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5dfill_c
- * Purpose:     Call H5Dfill to fill memory buffer with a fill value
- * Inputs:      fill_value - fill value
+/****if* H5Df/h5dfill_c
+ * NAME
+ *        h5dfill_c
+ * PURPOSE
+ *     Call H5Dfill to fill memory buffer with a fill value
+ * INPUTS
+ *      fill_value - fill value
  *              fill_type_id - fill value datatype identifier
  *              space_id - memory space selection identifier
  *              buf      - memory buffer to fill
  *              mem_type_id - memory buffer dtatype identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, March 12, 2003
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5dfill_c (void * fill_value, hid_t_f *fill_type_id, hid_t_f *space_id, void * buf, hid_t_f *mem_type_id)
-
+/******/
 {
      int ret_value = -1;
      herr_t ret;
@@ -1926,19 +2208,27 @@ nh5dfill_double_c (void * fill_value, hid_t_f *fill_type_id, hid_t_f *space_id,
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5dget_space_status_c
- * Purpose:     Call H5Dget_space_status to request dataspace allocation status
- * Inputs:      dset_id - dataset identifier
- * Outputs:     flag - status flag
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Df/h5dget_space_status_c
+ * NAME
+ *        h5dget_space_status_c
+ * PURPOSE
+ *     Call H5Dget_space_status to request dataspace allocation status
+ * INPUTS
+ *      dset_id - dataset identifier
+ * OUTPUTS
+ *     flag - status flag
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, March 12, 2003
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5dget_space_status_c ( hid_t_f *dset_id, int_f *flag)
-
+/******/
 {
      int ret_value = -1;
      herr_t ret;
@@ -1957,25 +2247,33 @@ nh5dget_space_status_c ( hid_t_f *dset_id, int_f *flag)
      ret_value = 0;
      return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5dcreate_anon_c
- * Purpose:     Call H5Dcreate_anon
- * Inputs:
+/****if* H5Df/h5dcreate_anon_c
+ * NAME
+ *        h5dcreate_anon_c
+ * PURPOSE
+ *     Call H5Dcreate_anon
+ * INPUTS
+ *
  *		loc_id	   - Identifier of the file or group within which to create the dataset.
  *		type_id	   - Identifier of the datatype to use when creating the dataset.
  *		space_id   - Identifier of the dataspace to use when creating the dataset.
  *              dcpl_id    - Dataset creation property list identifier.
  *              dapl_id    - Dataset access property list identifier.
- * Outputs:
+ * OUTPUTS
+ *
  *              dset_id - dataset identifier
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              February, 2008
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5dcreate_anon_c (hid_t_f *loc_id, hid_t_f *type_id, hid_t_f *space_id,
 		   hid_t_f *dcpl_id, hid_t_f *dapl_id, hid_t_f *dset_id)
+/******/
 {
   int ret_value = -1;
 
@@ -1992,20 +2290,174 @@ nh5dcreate_anon_c (hid_t_f *loc_id, hid_t_f *type_id, hid_t_f *space_id,
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5dget_access_plist_c
- * Purpose:     Call H5Dget_access_plist
- * Inputs:
- *              dset_id   - dataset identifier
- * Outputs:
- *              plist_id  - the dataset access property list identifier.
+/****if* H5Df/nh5dwrite_f_c
+ * NAME
+ *        nh5dwrite_f_c
+ * PURPOSE
+ *     Call H5Dwrite to write a dataset
+ * INPUTS
+ *      dset_id - dataset identifier
+ *              mem_type_id - memory datatype identifier
+ *              mem_space_id - memory dataspace identifier
+ *              file_space_id - memory dataspace identifier
+ *              xfer_pr  - identifier of transfer property list
+ *              buf      - data buffer
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
+ *              May 28, 2008
+ * HISTORY
+ *
+ *
+ * SOURCE
+*/
+int_f
+nh5dwrite_f_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id,
+		    hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf)
+/******/
+{
+  int ret_value = -1;
+  herr_t ret;
+  hid_t c_dset_id;
+  hid_t c_mem_type_id;
+  hid_t c_mem_space_id;
+  hid_t c_file_space_id;
+  hid_t c_xfer_prp;
+
+/*   int i, j; */
+/*   typedef struct { */
+/*     int x; */
+/*     float y; */
+/*   } r_dual_c; */
+
+/*   const r_dual_c *name=buf; */
+
+/*   r_dual_c access[4][4]; */
+
+/*   for ( i=0; i<4; ++i) */
+/*     for (j = 0; j<4; ++j) { */
+/*       access[i][j] = name[i*4+j]; */
+/*     /\* access[i].x = access[i].x + 1; *\/ */
+/*       printf("x = %i \n", access[i][j].x); */
+/*       printf("y = %f \n", access[i][j].y); */
+/*     } */
+
+  /*
+   * Define transfer property
+   */
+  c_xfer_prp = (hid_t)*xfer_prp;
+
+  /*
+   * Call H5Dwrite function.
+   */
+  c_dset_id = (hid_t)*dset_id;
+  c_mem_type_id = (hid_t)*mem_type_id;
+  c_mem_space_id = (hid_t)*mem_space_id;
+  c_file_space_id = (hid_t)*file_space_id;
+  ret = H5Dwrite(c_dset_id, c_mem_type_id, c_mem_space_id, c_file_space_id, c_xfer_prp, buf);
+
+  if (ret < 0) return ret_value;
+  ret_value = 0;
+  return ret_value;
+}
+/****if* H5Df/nh5dread_f_c
+ * NAME
+ *        nh5dread_f_c
+ * PURPOSE
+ *     Read variable length dataset
+ * INPUTS
+ *      dset_id - identifier of the dataset
+ *              mem_type_id - datatype identifier
+ *              mem_space_id - dataspace identifier
+ *              file_space_id - file dataspace identifier
+ *              xfer          - file transfer property
+ *              dims          - one-demnsional array of size 2
+ *                              dims[0] = MAXLENGTH
+ *                              dims[1] = number of elements of VL type
+ * OUTPUTS
+ *     buf           - data buffer
+ *              len           - array element lenghts
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
+ *              Wednesday, October 24, 2002
+ * HISTORY
+ *
+ * SOURCE
+*/
+
+int_f
+nh5dread_f_c ( hid_t_f *dset_id ,  hid_t_f *mem_type_id, hid_t_f *mem_space_id,
+		    hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf)
+/******/
+{
+  int ret_value = -1;
+  hid_t c_dset_id;
+  hid_t c_mem_type_id;
+  hid_t c_mem_space_id;
+  hid_t c_file_space_id;
+  hid_t c_xfer_prp;
+  herr_t status;
+
+/*   int i, j; */
+/*   typedef struct { */
+/*     int x; */
+/*     float y; */
+/*   } r_dual_c; */
+
+/*   r_dual_c *name=buf; */
+
+/*   r_dual_c access[4][4]; */
+
+  c_dset_id       = (hid_t)*dset_id;
+  c_mem_type_id   = (hid_t)*mem_type_id;
+  c_mem_space_id  = (hid_t)*mem_space_id;
+  c_file_space_id = (hid_t)*file_space_id;
+  c_xfer_prp      = (hid_t)*xfer_prp;
+  /*
+   * Call H5Dread function.
+   */
+
+/*   printf("%i %i %i %i %i \n",c_dset_id, c_mem_type_id, c_mem_space_id, c_file_space_id, c_xfer_prp); */
+
+  status = H5Dread(c_dset_id, c_mem_type_id, c_mem_space_id, c_file_space_id, c_xfer_prp, buf);
+  if ( status < 0 ) return ret_value;
+
+/*   for ( i=0; i<4; ++i) */
+/*     for (j = 0; j<4; ++j) { */
+/*       access[i][j] = name[i*4+j]; */
+/*     /\* access[i].x = access[i].x + 1; *\/ */
+/*       printf("x = %i \n", access[i][j].x); */
+/*       printf("y = %f \n", access[i][j].y); */
+/*      } */
+
+
+  ret_value = 1;
+  return ret_value;
+}
+/****if* H5Df/nh5dget_access_plist_c
+ * NAME
+ *     nh5dget_access_plist_c
+ * PURPOSE
+ *     Call H5Dget_access_plist
+ * INPUTS
+ *     dset_id   - dataset identifier
+ * OUTPUTS
+ *     plist_id  - the dataset access property list identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *     M. Scot Breitenfeld
+ *     April 13, 2009
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
- *              April 13, 2009
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
+
 int_f
 nh5dget_access_plist_c (hid_t_f *dset_id, hid_t_f *plist_id)
+/******/
 {
   int ret_value = -1;
   /*
@@ -2020,4 +2472,38 @@ nh5dget_access_plist_c (hid_t_f *dset_id, hid_t_f *plist_id)
   return ret_value;
 }
 
+/****if* H5Df/nh5dvlen_reclaim_c
+ * NAME
+ *     nh5dvlen_reclaim_c
+ * PURPOSE
+ *     Call H5Dvlen_reclaim
+ * INPUTS
+ *    type_id  - Identifier of the datatype. 
+ *   space_id  - Identifier of the dataspace. 
+ *   plist_id  - Identifier of the property list used to create the buffer. 
+ *   buf       - Pointer to the buffer to be reclaimed.    
+ *
+ * RETURNS
+ *   0 on success, -1 on failure
+ * AUTHOR
+ *   M. Scot Breitenfeld
+ *   January 15, 2011 
+ *
+ * SOURCE
+*/
+int_f
+nh5dvlen_reclaim_c(hid_t_f *type_id, hid_t_f *space_id, hid_t_f *plist_id, void *buf)
+/******/
+{
+  int ret_value = -1;
+  herr_t status;
+
+  /*
+   * Call H5Dvlen_reclaim function.
+   */
+  status = H5Dvlen_reclaim((hid_t)*type_id, (hid_t)*space_id, (hid_t)*plist_id, buf);
+  if ( status < 0 ) return ret_value;
 
+  ret_value = 0;
+  return ret_value;
+}
diff --git a/fortran/src/H5Dff.f90 b/fortran/src/H5Dff.f90
index c4810b3..24917e7 100644
--- a/fortran/src/H5Dff.f90
+++ b/fortran/src/H5Dff.f90
@@ -1,3 +1,17 @@
+!****h* ROBODoc/H5D
+!
+! NAME
+!  MODULE H5D
+!
+! FILE
+!  fortran/src/H5Dff.f90
+!
+! PURPOSE
+!  This file contains Fortran interfaces for H5D functions. It includes
+!  all the functions that are independent on whether the Fortran 2003 functions
+!  are enabled or disabled.
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,76 +27,19 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
+! NOTES
+!                         *** IMPORTANT ***
+!  If you add a new H5D function 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.
 !
-! This file contains Fortran90 interfaces for H5D functions.
-!
+!*****
+
 MODULE H5D
   USE H5GLOBAL
 
-  INTERFACE h5dwrite_f
-
-     MODULE PROCEDURE h5dwrite_reference_obj
-     MODULE PROCEDURE h5dwrite_reference_dsetreg
-     MODULE PROCEDURE h5dwrite_integer_scalar
-     MODULE PROCEDURE h5dwrite_integer_1
-     MODULE PROCEDURE h5dwrite_integer_2
-     MODULE PROCEDURE h5dwrite_integer_3
-     MODULE PROCEDURE h5dwrite_integer_4
-     MODULE PROCEDURE h5dwrite_integer_5
-     MODULE PROCEDURE h5dwrite_integer_6
-     MODULE PROCEDURE h5dwrite_integer_7
-     MODULE PROCEDURE h5dwrite_char_scalar
-     MODULE PROCEDURE h5dwrite_char_1
-     MODULE PROCEDURE h5dwrite_char_2
-     MODULE PROCEDURE h5dwrite_char_3
-     MODULE PROCEDURE h5dwrite_char_4
-     MODULE PROCEDURE h5dwrite_char_5
-     MODULE PROCEDURE h5dwrite_char_6
-     MODULE PROCEDURE h5dwrite_char_7
-     MODULE PROCEDURE h5dwrite_real_scalar
-     MODULE PROCEDURE h5dwrite_real_1
-     MODULE PROCEDURE h5dwrite_real_2
-     MODULE PROCEDURE h5dwrite_real_3
-     MODULE PROCEDURE h5dwrite_real_4
-     MODULE PROCEDURE h5dwrite_real_5
-     MODULE PROCEDURE h5dwrite_real_6
-     MODULE PROCEDURE h5dwrite_real_7
-  END INTERFACE
-
-  INTERFACE h5dread_f
-
-     MODULE PROCEDURE h5dread_reference_obj
-     MODULE PROCEDURE h5dread_reference_dsetreg
-     MODULE PROCEDURE h5dread_integer_scalar
-     MODULE PROCEDURE h5dread_integer_1
-     MODULE PROCEDURE h5dread_integer_2
-     MODULE PROCEDURE h5dread_integer_3
-     MODULE PROCEDURE h5dread_integer_4
-     MODULE PROCEDURE h5dread_integer_5
-     MODULE PROCEDURE h5dread_integer_6
-     MODULE PROCEDURE h5dread_integer_7
-     MODULE PROCEDURE h5dread_char_scalar
-     MODULE PROCEDURE h5dread_char_1
-     MODULE PROCEDURE h5dread_char_2
-     MODULE PROCEDURE h5dread_char_3
-     MODULE PROCEDURE h5dread_char_4
-     MODULE PROCEDURE h5dread_char_5
-     MODULE PROCEDURE h5dread_char_6
-     MODULE PROCEDURE h5dread_char_7
-     MODULE PROCEDURE h5dread_real_scalar
-     MODULE PROCEDURE h5dread_real_1
-     MODULE PROCEDURE h5dread_real_2
-     MODULE PROCEDURE h5dread_real_3
-     MODULE PROCEDURE h5dread_real_4
-     MODULE PROCEDURE h5dread_real_5
-     MODULE PROCEDURE h5dread_real_6
-     MODULE PROCEDURE h5dread_real_7
-  END INTERFACE
-
-  INTERFACE h5dwrite_vl_f
-     MODULE PROCEDURE h5dwrite_vl_integer
-     MODULE PROCEDURE h5dwrite_vl_real
-     MODULE PROCEDURE h5dwrite_vl_string
+  INTERFACE h5dextend_f
+     MODULE PROCEDURE h5dset_extent_f
   END INTERFACE
 
   INTERFACE h5dread_vl_f
@@ -91,53 +48,50 @@ MODULE H5D
      MODULE PROCEDURE h5dread_vl_string
   END INTERFACE
 
-  INTERFACE h5dfill_f
-     MODULE PROCEDURE h5dfill_integer
-     MODULE PROCEDURE h5dfill_real
-     MODULE PROCEDURE h5dfill_char
-  END INTERFACE
-
-  INTERFACE h5dextend_f
-     MODULE PROCEDURE h5dset_extent_f
+  INTERFACE h5dwrite_vl_f
+     MODULE PROCEDURE h5dwrite_vl_integer
+     MODULE PROCEDURE h5dwrite_vl_real
+     MODULE PROCEDURE h5dwrite_vl_string
   END INTERFACE
 
-
 CONTAINS
 
-!----------------------------------------------------------------------
-! Name:		h5dcreate_f
 !
-! Purpose: 	Creates a dataset at the specified location
+!****s* H5D/h5dcreate_f
 !
-! Inputs:
-!		loc_id		- file or group identifier
-!		name		- dataset name
-!		type_id		- dataset datatype identifier
-!		space_id	- dataset dataspace identifier
-! Outputs:
-!		dset_id		- dataset identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!            creation_prp - Dataset creation property list
-!            lcpl_id      - Link creation property list
-!            dapl_id      - Dataset access property list
+! NAME
+!  h5dcreate_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Creates a dataset at the specified location
 !
-! Modifications:
-!                 - Explicit Fortran interfaces were added for
-!	           called C functions (it is needed for Windows
-!		   port).  February 28, 2001
+! INPUTS
+!  loc_id 	 - file or group identifier
+!  name 	 - dataset name
+!  type_id 	 - dataset datatype identifier
+!  space_id 	 - dataset dataspace identifier
+! OUTPUTS
+!  dset_id 	 - dataset identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  creation_prp  - Dataset creation property list
+!  lcpl_id 	 - Link creation property list
+!  dapl_id 	 - Dataset access property list
 !
-!                 - Added version's 1.8 new optional parameters
-!                  February, 2008
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! HISTORY
+!
+!  - Explicit Fortran interfaces were added for
+!    called C functions (it is needed for Windows
+!    port).  February 28, 2001
+!
+!  - Added version's 1.8 new optional parameters
+!    February, 2008
+!
+! SOURCE
   SUBROUTINE h5dcreate_f(loc_id, name, type_id, space_id, dset_id, &
        hdferr, dcpl_id, lcpl_id, dapl_id)
     IMPLICIT NONE
@@ -147,7 +101,7 @@ CONTAINS
     INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier
     INTEGER(HID_T), INTENT(OUT) :: dset_id ! Dataset identifier
     INTEGER, INTENT(OUT) :: hdferr         ! Error code
-
+!*****
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: dcpl_id ! Dataset creation property list
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lcpl_id ! Link creation property list
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: dapl_id ! Dataset access property list
@@ -156,7 +110,7 @@ CONTAINS
     INTEGER(HID_T) :: dcpl_id_default
     INTEGER(HID_T) :: dapl_id_default
 
-    INTEGER :: namelen                     ! Name length
+    INTEGER :: namelen ! Name length
 
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
@@ -196,4176 +150,885 @@ CONTAINS
 
   END SUBROUTINE h5dcreate_f
 
-!----------------------------------------------------------------------
-! Name:		h5dopen_f
 !
-! Purpose: 	Opens an existing dataset.
+!****s* H5D/h5dopen_f
+!
+! NAME
+!  h5dopen_f
 !
-! Inputs:
-!		loc_id		- file or group identifier
-!		name		- dataset name
-! Outputs:
-!		dset_id		- dataset identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!	       dapl_id	        - Dataset access property list
+! PURPOSE
+!  Opens an existing dataset.
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! INPUTS
+!  loc_id 	 - file or group identifier
+!  name 	 - dataset name
+! OUTPUTS
+!  dset_id 	 - dataset identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  dapl_id 	 - Dataset access property list
 !
-! Modifications:  -Explicit Fortran interfaces were added for
-!		   called C functions (it is needed for Windows
-!		   port).  February 28, 2001
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-!                 -Added 1.8 (optional) parameter dapl_id
-!                  February, 2008, M. Scot Breitenfeld
+! HISTORY
+!  -Explicit Fortran interfaces were added for
+!   called C functions (it is needed for Windows
+!   port).  February 28, 2001
 !
-! Comment:
-!----------------------------------------------------------------------
+!  -Added 1.8 (optional) parameter dapl_id
+!   February, 2008, M. Scot Breitenfeld
+!
+! SOURCE
+  SUBROUTINE h5dopen_f(loc_id, name, dset_id, hdferr, dapl_id)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the dataset
+    INTEGER(HID_T), INTENT(OUT) :: dset_id ! Dataset identifier
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: dapl_id ! Dataset access property list
+!*****
+    INTEGER :: namelen                     ! Name length
+
+    INTEGER(HID_T) :: dapl_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dopen_c(loc_id, name, namelen, dapl_id_default, dset_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DOPEN_C'::h5dopen_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         INTEGER(HID_T), INTENT(IN) :: loc_id
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER :: namelen
+         INTEGER(HID_T), INTENT(IN) :: dapl_id_default
+         INTEGER(HID_T), INTENT(OUT) :: dset_id
+       END FUNCTION h5dopen_c
+    END INTERFACE
+
+    dapl_id_default = H5P_DEFAULT_F
+    IF(PRESENT(dapl_id)) dapl_id_default = dapl_id
 
-          SUBROUTINE h5dopen_f(loc_id, name, dset_id, hdferr, dapl_id)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier
-            CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the dataset
-            INTEGER(HID_T), INTENT(OUT) :: dset_id ! Dataset identifier
-            INTEGER, INTENT(OUT) :: hdferr         ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: dapl_id ! Dataset access property list
-            INTEGER :: namelen                     ! Name length
+    namelen = LEN(name)
+    hdferr = h5dopen_c(loc_id, name, namelen, dapl_id_default, dset_id)
 
-            INTEGER(HID_T) :: dapl_id_default
+  END SUBROUTINE h5dopen_f
 
-!            INTEGER, EXTERNAL :: h5dopen_c
-!  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5dopen_c(loc_id, name, namelen, dapl_id_default, dset_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DOPEN_C'::h5dopen_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              INTEGER(HID_T), INTENT(IN) :: loc_id
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER :: namelen
-              INTEGER(HID_T), INTENT(IN) :: dapl_id_default
-              INTEGER(HID_T), INTENT(OUT) :: dset_id
-              END FUNCTION h5dopen_c
-            END INTERFACE
-
-            dapl_id_default = H5P_DEFAULT_F
-            IF(PRESENT(dapl_id)) dapl_id_default = dapl_id
+!****s* H5D/h5dclose_f
+!
+! NAME
+!  h5dclose_f
+!
+! PURPOSE
+!  Closes a dataset.
+!
+! INPUTS
+!  dset_id 	 - dataset identifier
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
+!
+! SOURCE
+  SUBROUTINE h5dclose_f(dset_id, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id ! Dataset identifier
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5dclose_c(dset_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DCLOSE_C'::h5dclose_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+       END FUNCTION h5dclose_c
+    END INTERFACE
 
-            namelen = LEN(name)
-            hdferr = h5dopen_c(loc_id, name, namelen, dapl_id_default, dset_id)
+    hdferr = h5dclose_c(dset_id)
 
-          END SUBROUTINE h5dopen_f
+  END SUBROUTINE h5dclose_f
 
-!----------------------------------------------------------------------
-! Name:		h5dclose_f
 !
-! Purpose: 	Closes a dataset.
+!****s* H5D/h5dget_type_f
+!
+! NAME
+!  h5dget_type_f
+!
+! PURPOSE
+!  Returns an identifier for a copy of the datatype for a
+!  dataset.
 !
-! Inputs:
-!		dset_id		- dataset identifier
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! INPUTS
+!  dataset_id 	 - dataset identifier
+! OUTPUTS
+!  datatype_id 	 - dataspace identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  February 28, 2001
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
 !
-! Comment:
-!----------------------------------------------------------------------
+! NOTES
+!
+! SOURCE
+  SUBROUTINE h5dget_type_f(dataset_id, datatype_id, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dataset_id      ! Dataset identifier
+    INTEGER(HID_T), INTENT(OUT) :: datatype_id    ! Datatype identifier
+    INTEGER, INTENT(OUT) :: hdferr                ! Error code
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5dget_type_c (dataset_id, datatype_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DGET_TYPE_C'::h5dget_type_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dataset_id
+         INTEGER(HID_T), INTENT(OUT) :: datatype_id
+       END FUNCTION h5dget_type_c
+    END INTERFACE
 
-          SUBROUTINE h5dclose_f(dset_id, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id ! Dataset identifier
-            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+    hdferr = h5dget_type_c (dataset_id, datatype_id)
+  END SUBROUTINE h5dget_type_f
 
-!            INTEGER, EXTERNAL :: h5dclose_c
-!  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5dclose_c(dset_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DCLOSE_C'::h5dclose_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              END FUNCTION h5dclose_c
-            END INTERFACE
+!****s* H5D/h5dset_extent
+!
+! NAME
+!  h5dset_extent (instead of obsolete name: h5dextend_f)
+!
+! PURPOSE
+!  Extends a dataset with unlimited dimension.
+!
+! INPUTS
+!  dataset_id 	 - dataset identifier
+!  size 	 - array containing the new magnitude of
+!                  each dimension
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
+!
+!  Changed name from the now obsolete h5dextend_f
+!  to h5dset_extent_f. Provided interface to old name
+!  for backward compatability. -MSB- March 14, 2008
+!
+! SOURCE
+  SUBROUTINE h5dset_extent_f(dataset_id, size, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dataset_id      ! Dataset identifier
+    INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN)  :: size
+    ! Array containing
+    ! dimensions' sizes
+    INTEGER, INTENT(OUT) :: hdferr                ! Error code
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5dset_extent_c(dataset_id, size)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DSET_EXTENT_C'::h5dset_extent_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dataset_id
+         INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN)  :: size
+       END FUNCTION h5dset_extent_c
+    END INTERFACE
+
+    hdferr = H5Dset_extent_c(dataset_id, size)
+  END SUBROUTINE h5dset_extent_f
 
-            hdferr = h5dclose_c(dset_id)
+!****s* H5D/h5dget_create_plist_f
+!
+! NAME
+!  h5dget_create_plist_f
+!
+! PURPOSE
+!  Returns an identifier for a copy of the dataset creation
+!  property list for a dataset.
+!
+! INPUTS
+!  dataset_id 	 - dataset identifier
+! OUTPUTS
+!  plist_id 	 - creation property list identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
+! SOURCE
+  SUBROUTINE h5dget_create_plist_f(dataset_id, plist_id, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dataset_id   ! Dataset identifier
+    INTEGER(HID_T), INTENT(OUT) :: plist_id    ! Dataset creation
+                                               ! property list identifier
+    INTEGER, INTENT(OUT) :: hdferr             ! Error code
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5dget_create_plist_c(dataset_id, plist_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DGET_CREATE_PLIST_C'::h5dget_create_plist_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dataset_id
+         INTEGER(HID_T), INTENT(OUT) :: plist_id
+       END FUNCTION h5dget_create_plist_c
+    END INTERFACE
 
-          END SUBROUTINE h5dclose_f
+    hdferr = h5dget_create_plist_c(dataset_id, plist_id)
+  END SUBROUTINE h5dget_create_plist_f
 
-          SUBROUTINE h5dwrite_reference_obj(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: dims ! size of the bufffer buf
-            TYPE(hobj_ref_t_f), DIMENSION(dims(1)), INTENT(IN) :: buf ! Data buffer
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
+!
+!****s* H5D/h5dget_storage_size_f
+!
+! NAME
+!  h5dget_storage_size_f
+!
+! PURPOSE
+!  Returns the amount of storage requires by a dataset
+!
+! INPUTS
+!  dataset_id 	 - dataset identifier
+! OUTPUTS
+!  size 	 - datastorage size
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 15, 2002
+! SOURCE
+  SUBROUTINE h5dget_storage_size_f(dataset_id, size, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dataset_id ! Dataset identifier
+    INTEGER(HSIZE_T),  INTENT(OUT)  :: size  ! Amount of storage
+                                             ! allocated for dataset
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5dget_storage_size_c(dataset_id, size)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DGET_STORAGE_SIZE_C'::h5dget_storage_size_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dataset_id
+         INTEGER(HSIZE_T), INTENT(OUT)  :: size
+       END FUNCTION h5dget_storage_size_c
+    END INTERFACE
 
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-            INTEGER(HADDR_T), ALLOCATABLE, DIMENSION(:) :: ref_buf
-            INTEGER :: j
+    hdferr = h5dget_storage_size_c(dataset_id, size)
+  END SUBROUTINE h5dget_storage_size_f
 
-!            INTEGER, EXTERNAL :: h5dwrite_ref_obj_c
-! MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_ref_obj_c(dset_id, mem_type_id,&
-                                                  mem_space_id_default, &
-                               file_space_id_default, xfer_prp_default, ref_buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REF_OBJ_C'::h5dwrite_ref_obj_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HADDR_T), DIMENSION(*) :: ref_buf
-              INTEGER(HSIZE_T), DIMENSION(*) :: dims
-              END FUNCTION h5dwrite_ref_obj_c
-            END INTERFACE
+!****s* H5D/h5dvlen_get_max_len_f
+!
+! NAME
+!  h5dvlen_get_max_len_f
+!
+! PURPOSE
+!  Returns maximum length of the VL array elements
+!
+! INPUTS
+!  dataset_id 	 - dataset identifier
+!  type_id 	 - datatype identifier
+!  space_id 	 - dataspace identifier
+! OUTPUTS
+!  size 	 - buffer size
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  NONE
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 15, 2002
+!
+! SOURCE
+  SUBROUTINE h5dvlen_get_max_len_f(dataset_id, type_id, space_id, len,  hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dataset_id      ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: type_id         ! Datatype identifier
+    INTEGER(HID_T), INTENT(IN) :: space_id        ! Dataspace identifier
+    INTEGER(SIZE_T),  INTENT(OUT)  :: len         ! Maximum length of the element
+    INTEGER, INTENT(OUT) :: hdferr                ! Error code
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5dvlen_get_max_len_c(dataset_id, type_id, space_id, len)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DVLEN_GET_MAX_LEN_C'::h5dvlen_get_max_len_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dataset_id
+         INTEGER(HID_T), INTENT(IN) :: type_id
+         INTEGER(HID_T), INTENT(IN) :: space_id
+         INTEGER(SIZE_T), INTENT(OUT)  :: len
+       END FUNCTION h5dvlen_get_max_len_c
+    END INTERFACE
 
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
+    hdferr = h5dvlen_get_max_len_c(dataset_id, type_id,  space_id, len)
+  END SUBROUTINE h5dvlen_get_max_len_f
 
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
+!
+!****s* H5D/h5dget_space_status_f
+!
+! NAME
+!  h5dget_space_status_f
+!
+! PURPOSE
+!  Returns the status of data space allocation.
+!
+! INPUTS
+!  dset_id	 - dataset identifier
+! OUTPUTS
+!  flag          - status; may have one of the following values:
+!		    H5D_SPACE_STS_ERROR_F
+!		    H5D_SPACE_STS_NOT_ALLOCATED_F
+!		    H5D_SPACE_STS_PART_ALLOCATED_F
+!		    H5D_SPACE_STS_ALLOCATED_F
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  March 12, 2003
+!
+! SOURCE
+  SUBROUTINE h5dget_space_status_f(dset_id, flag, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id  ! Dataspace identifier
+    INTEGER, INTENT(IN)        :: flag     ! Memory buffer to fill in
+    INTEGER, INTENT(OUT)       :: hdferr   ! Error code
+  !*****
+    INTERFACE
+       INTEGER FUNCTION h5dget_space_status_c(dset_id, flag)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DGET_SPACE_STATUS_C'::h5dget_space_status_c
+         !DEC$ENDIF
+         INTEGER(HID_T) :: dset_id
+         INTEGER        :: flag
+       END FUNCTION h5dget_space_status_c
+    END INTERFACE
 
-            allocate(ref_buf(dims(1)), stat=hdferr)
-            if (hdferr .NE. 0 ) then
-                hdferr = -1
-                return
-            else
-                do j = 1, dims(1)
-                   ref_buf(j) = buf(j)%ref
-                enddo
-            endif
-            hdferr = h5dwrite_ref_obj_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, ref_buf, dims(1))
-            deallocate(ref_buf)
+    hdferr = h5dget_space_status_c(dset_id, flag)
+  END SUBROUTINE h5dget_space_status_f
 
-          END SUBROUTINE h5dwrite_reference_obj
+!
+!****s* H5D/h5dcreate_anon_f
+!
+! NAME
+!  h5dcreate_anon_f
+!
+! PURPOSE
+!  Creates a dataset in a file without linking it into the file structure
+!
+! INPUTS
+!  loc_id	 - Identifier of the file or group within which to create the dataset.
+!  type_id	 - Identifier of the datatype to use when creating the dataset.
+!  space_id	 - Identifier of the dataspace to use when creating the dataset.
+! OUTPUTS
+!  dset_id	 - dataset identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  dcpl_id       - Dataset creation property list identifier.
+!  dapl_id  	 - Dataset access property list identifier.
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February 11, 2008
+!
+! SOURCE
+  SUBROUTINE h5dcreate_anon_f(loc_id, type_id, space_id, dset_id, hdferr, dcpl_id, dapl_id)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier.
+    INTEGER(HID_T), INTENT(IN) :: type_id  ! Datatype identifier.
+    INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier.
+    INTEGER(HID_T), INTENT(OUT) :: dset_id ! Dataset identifier.
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code.
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: dcpl_id  ! Dataset creation property list identifier.
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: dapl_id  ! Dataset access property list identifier.
+!*****
+    INTEGER(HID_T) :: dcpl_id_default
+    INTEGER(HID_T) :: dapl_id_default
 
-          SUBROUTINE h5dwrite_reference_dsetreg(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: dims ! size of the bufffer buf
-            TYPE(hdset_reg_ref_t_f), DIMENSION(dims(1)), INTENT(IN) :: buf ! Data buffer
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
+    !
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5dcreate_anon_c(loc_id, type_id, space_id, dcpl_id_default, dapl_id_default, dset_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DCREATE_ANON_C'::h5dcreate_anon_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: loc_id
+         INTEGER(HID_T), INTENT(IN) :: type_id
+         INTEGER(HID_T), INTENT(IN) :: space_id
+         INTEGER(HID_T) :: dcpl_id_default
+         INTEGER(HID_T) :: dapl_id_default
+         INTEGER(HID_T), INTENT(OUT) :: dset_id
+       END FUNCTION h5dcreate_anon_c
+    END INTERFACE
 
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-            INTEGER, ALLOCATABLE, DIMENSION(:) :: ref_buf
-            INTEGER :: i,j
+    dcpl_id_default = H5P_DEFAULT_F
+    dapl_id_default = H5P_DEFAULT_F
 
-!            INTEGER, EXTERNAL :: h5dwrite_ref_reg_c
-! MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_ref_reg_c(dset_id, mem_type_id,&
-                                                  mem_space_id_default, &
-                               file_space_id_default, xfer_prp_default, ref_buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REF_REG_C'::h5dwrite_ref_reg_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER, DIMENSION(*) :: ref_buf
-              INTEGER(HSIZE_T), DIMENSION(*) ::  dims
-              END FUNCTION h5dwrite_ref_reg_c
-            END INTERFACE
+    IF(PRESENT(dcpl_id)) dcpl_id_default = dcpl_id
+    IF(PRESENT(dapl_id)) dapl_id_default = dapl_id
 
+    hdferr = h5dcreate_anon_c(loc_id, type_id, space_id, dcpl_id_default, dapl_id_default, dset_id)
 
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
+  END SUBROUTINE h5dcreate_anon_f
 
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
+  SUBROUTINE h5dwrite_vl_integer(dset_id, mem_type_id, buf, dims, len, &
+       hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims ! MAX len x num_elem
+    INTEGER(SIZE_T), INTENT(IN), DIMENSION(*) :: len ! Array to store
+                                                     ! the length of each
+                                                     ! element
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2)), TARGET :: buf   ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
 
-            allocate(ref_buf(REF_REG_BUF_LEN*dims(1)), stat=hdferr)
-            if (hdferr .NE. 0 ) then
-                hdferr = -1
-                return
-            else
-                do j = 1, dims(1)
-                  do i = 1, REF_REG_BUF_LEN
-                   ref_buf(REF_REG_BUF_LEN*(j-1) + i) = buf(j)%ref(i)
-                 enddo
-                enddo
-            endif
-            hdferr = h5dwrite_ref_reg_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, ref_buf, dims)
-            deallocate(ref_buf)
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_vl_integer_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims, len)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_VL_INTEGER_C'::h5dwrite_vl_integer_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER(SIZE_T), INTENT(IN), DIMENSION(*) :: len
+         INTEGER, INTENT(IN), &
+              DIMENSION(dims(1),dims(2)) :: buf
+       END FUNCTION h5dwrite_vl_integer_c
+    END INTERFACE
 
-          END SUBROUTINE h5dwrite_reference_dsetreg
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
 
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
 
-          SUBROUTINE h5dwrite_integer_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER, INTENT(IN) :: buf ! Data buffer
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
+    hdferr = h5dwrite_vl_integer_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims, len)
 
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
+  END SUBROUTINE h5dwrite_vl_integer
 
-!            INTEGER, EXTERNAL :: h5dwrite_integer_s_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_integer_s_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_INTEGER_S_C'::h5dwrite_integer_s_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, INTENT(IN) :: buf
-              END FUNCTION h5dwrite_integer_s_c
-            END INTERFACE
+  SUBROUTINE h5dread_vl_integer(dset_id, mem_type_id, buf, dims, len, &
+       hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims  ! MAX len x num_elem
+    INTEGER(SIZE_T), INTENT(INOUT), DIMENSION(*) :: len ! Array to store
+                                                        ! the length of each
+                                                        ! element
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2)), TARGET :: buf   ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr ! Error code
+                                   ! -1 if failed, 0 otherwise
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    INTEGER(HID_T) :: tmp
+    INTEGER :: error
 
+    INTERFACE
+       INTEGER FUNCTION h5dread_vl_integer_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims, len)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_VL_INTEGER_C'::h5dread_vl_integer_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER(SIZE_T), INTENT(INOUT), DIMENSION(*) :: len
+         INTEGER, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2)) :: buf
+       END FUNCTION h5dread_vl_integer_c
+    END INTERFACE
 
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
+    CALL h5dget_space_f(dset_id, tmp, error)
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = tmp
+    file_space_id_default = tmp
 
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
 
-            hdferr = h5dwrite_integer_s_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
+    hdferr = h5dread_vl_integer_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims, len)
 
-          END SUBROUTINE h5dwrite_integer_scalar
+  END SUBROUTINE h5dread_vl_integer
 
-          SUBROUTINE h5dwrite_integer_1(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            INTEGER, INTENT(IN), &
-            DIMENSION(dims(1)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
+  SUBROUTINE h5dwrite_vl_real(dset_id, mem_type_id, buf, dims, len, &
+       hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims ! MAX len x num_elem
+    INTEGER(SIZE_T), INTENT(IN), DIMENSION(*) :: len   ! Array to store
+                                                       ! the length of each
+                                                       ! element
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2)) :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
 
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
 
-!            INTEGER, EXTERNAL :: h5dwrite_integer_1_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_integer_1_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_INTEGER_1_C'::h5dwrite_integer_1_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, INTENT(IN), &
-              DIMENSION(dims(1)) :: buf
-              END FUNCTION h5dwrite_integer_1_c
-            END INTERFACE
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_vl_real_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims, len)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_VL_REAL_C'::h5dwrite_vl_real_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER(SIZE_T), INTENT(IN), DIMENSION(*) :: len
+         REAL, INTENT(IN), &
+              DIMENSION(dims(1),dims(2)) :: buf
+       END FUNCTION h5dwrite_vl_real_c
+    END INTERFACE
 
 
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
 
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
 
-            hdferr = h5dwrite_integer_1_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
+    hdferr = h5dwrite_vl_real_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims, len)
 
-          END SUBROUTINE h5dwrite_integer_1
+  END SUBROUTINE h5dwrite_vl_real
 
-          SUBROUTINE h5dwrite_integer_2(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            INTEGER, INTENT(IN), &
-            DIMENSION(dims(1),dims(2)) :: buf   ! Data buffer
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
+  SUBROUTINE h5dread_vl_real(dset_id, mem_type_id, buf, dims, len, &
+       hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims  ! MAX len x num_elem
+    INTEGER(SIZE_T), INTENT(INOUT), DIMENSION(*) :: len ! Array to store the length of each element
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2)) :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+                                           ! -1 if failed, 0 otherwise
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
 
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    INTEGER(HID_T) :: tmp
+    INTEGER :: error
 
-!            INTEGER, EXTERNAL :: h5dwrite_integer_2_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_integer_2_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_INTEGER_2_C'::h5dwrite_integer_2_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, INTENT(IN), &
+    INTERFACE
+       INTEGER FUNCTION h5dread_vl_real_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims, len)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_VL_REAL_C'::h5dread_vl_real_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER(SIZE_T), INTENT(INOUT), DIMENSION(*) :: len
+         REAL, INTENT(INOUT), &
               DIMENSION(dims(1),dims(2)) :: buf
-              END FUNCTION h5dwrite_integer_2_c
-            END INTERFACE
+       END FUNCTION h5dread_vl_real_c
+    END INTERFACE
 
+    CALL h5dget_space_f(dset_id, tmp, error)
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = tmp
+    file_space_id_default = tmp
 
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
 
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-            hdferr = h5dwrite_integer_2_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims)
+    hdferr = h5dread_vl_real_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims, len)
 
-          END SUBROUTINE h5dwrite_integer_2
+  END SUBROUTINE h5dread_vl_real
 
-          SUBROUTINE h5dwrite_integer_3(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            INTEGER, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
+  SUBROUTINE h5dwrite_vl_string(dset_id, mem_type_id, buf, dims, str_len, &
+       hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims   ! Number of strings
+    INTEGER(SIZE_T), INTENT(IN), DIMENSION(*) :: str_len ! Array to store the length of each element
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(2)) :: buf  ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr  ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
 
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_vl_string_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            ! xfer_prp_default, tmp_buf, dims, str_len)
+            xfer_prp_default, buf, dims, str_len)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_VL_STRING_C'::h5dwrite_vl_string_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims
+         INTEGER(SIZE_T), INTENT(IN), DIMENSION(*) :: str_len
+         CHARACTER(LEN=*), DIMENSION(dims(2)) :: buf
+       END FUNCTION
+    END INTERFACE
 
-!            INTEGER, EXTERNAL :: h5dwrite_integer_3_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_integer_3_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_INTEGER_3_C'::h5dwrite_integer_3_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3)) :: buf
-              END FUNCTION h5dwrite_integer_3_c
-            END INTERFACE
 
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
 
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
 
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
+    hdferr = h5dwrite_vl_string_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims, str_len)
 
-            hdferr = h5dwrite_integer_3_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims)
+  END SUBROUTINE h5dwrite_vl_string
 
-          END SUBROUTINE h5dwrite_integer_3
-
-          SUBROUTINE h5dwrite_integer_4(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            INTEGER, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwrite_integer_4_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_integer_4_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_INTEGER_4_C'::h5dwrite_integer_4_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-              END FUNCTION h5dwrite_integer_4_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwrite_integer_4_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims)
-
-          END SUBROUTINE h5dwrite_integer_4
-
-          SUBROUTINE h5dwrite_integer_5(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            INTEGER, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwrite_integer_5_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_integer_5_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_INTEGER_5_C'::h5dwrite_integer_5_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-              END FUNCTION h5dwrite_integer_5_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwrite_integer_5_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims)
-
-          END SUBROUTINE h5dwrite_integer_5
-
-          SUBROUTINE h5dwrite_integer_6(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            INTEGER, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwrite_integer_6_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_integer_6_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_INTEGER_6_C'::h5dwrite_integer_6_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-              END FUNCTION h5dwrite_integer_6_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwrite_integer_6_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims)
-
-          END SUBROUTINE h5dwrite_integer_6
-
-          SUBROUTINE h5dwrite_integer_7(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            INTEGER, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwrite_integer_7_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_integer_7_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_INTEGER_7_C'::h5dwrite_integer_7_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-              END FUNCTION h5dwrite_integer_7_c
-            END INTERFACE
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwrite_integer_7_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims)
-
-          END SUBROUTINE h5dwrite_integer_7
-
-
-          SUBROUTINE h5dwrite_char_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            CHARACTER(LEN=*), INTENT(IN) :: buf ! Data buffer
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwritec_s_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwritec_s_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITEC_S_C'::h5dwritec_s_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              CHARACTER(LEN=*), INTENT(IN) :: buf
-              END FUNCTION h5dwritec_s_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwritec_s_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dwrite_char_scalar
-
-          SUBROUTINE h5dwrite_char_1(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            CHARACTER(LEN=*), INTENT(IN), &
-            DIMENSION(dims(1)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwritec_1_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwritec_1_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITEC_1_C'::h5dwritec_1_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              CHARACTER(LEN=*), INTENT(IN), &
-              DIMENSION(dims(1)) :: buf
-              END FUNCTION h5dwritec_1_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwritec_1_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dwrite_char_1
-
-          SUBROUTINE h5dwrite_char_2(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            CHARACTER(LEN=*), INTENT(IN), &
-            DIMENSION(dims(1),dims(2)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwritec_2_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwritec_2_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITEC_2_C'::h5dwritec_2_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              CHARACTER(LEN=*), INTENT(IN), &
-              DIMENSION(dims(1),dims(2)) :: buf
-              END FUNCTION h5dwritec_2_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwritec_2_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dwrite_char_2
-
-          SUBROUTINE h5dwrite_char_3(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            CHARACTER(LEN=*), INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwritec_3_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwritec_3_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITEC_3_C'::h5dwritec_3_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              CHARACTER(LEN=*), INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3)) :: buf
-              END FUNCTION h5dwritec_3_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwritec_3_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dwrite_char_3
-
-          SUBROUTINE h5dwrite_char_4(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            CHARACTER(LEN=*), INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwritec_4_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwritec_4_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITEC_4_C'::h5dwritec_4_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              CHARACTER(LEN=*), INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-              END FUNCTION h5dwritec_4_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwritec_4_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dwrite_char_4
-
-          SUBROUTINE h5dwrite_char_5(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            CHARACTER(LEN=*), INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwritec_5_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwritec_5_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITEC_5_C'::h5dwritec_5_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              CHARACTER(LEN=*), INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-              END FUNCTION h5dwritec_5_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwritec_5_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dwrite_char_5
-
-          SUBROUTINE h5dwrite_char_6(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            CHARACTER(LEN=*), INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwritec_6_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwritec_6_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITEC_6_C'::h5dwritec_6_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              CHARACTER(LEN=*), INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-              END FUNCTION h5dwritec_6_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwritec_6_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dwrite_char_6
-
-          SUBROUTINE h5dwrite_char_7(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            CHARACTER(LEN=*), INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwritec_7_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwritec_7_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITEC_7_C'::h5dwritec_7_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              CHARACTER(LEN=*), INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-              END FUNCTION h5dwritec_7_c
-            END INTERFACE
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwritec_7_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dwrite_char_7
-
-          SUBROUTINE h5dwrite_real_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            REAL, INTENT(IN) :: buf ! Data buffer
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwrite_real_s_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_real_s_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REAL_S_C'::h5dwrite_real_s_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              REAL, INTENT(IN) :: buf
-              END FUNCTION h5dwrite_real_s_c
-            END INTERFACE
-
-
-            xfer_prp_default  = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwrite_real_s_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dwrite_real_scalar
-
-          SUBROUTINE h5dwrite_real_1(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            REAL, INTENT(IN), &
-            DIMENSION(dims(1)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwrite_real_1_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_real_1_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REAL_1_C'::h5dwrite_real_1_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              REAL, INTENT(IN), &
-              DIMENSION(dims(1)) :: buf
-              END FUNCTION h5dwrite_real_1_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwrite_real_1_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dwrite_real_1
-
-          SUBROUTINE h5dwrite_real_2(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            REAL, INTENT(IN), &
-            DIMENSION(dims(1),dims(2)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwrite_real_2_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_real_2_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REAL_2_C'::h5dwrite_real_2_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              REAL, INTENT(IN), &
-              DIMENSION(dims(1),dims(2)) :: buf
-              END FUNCTION h5dwrite_real_2_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwrite_real_2_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dwrite_real_2
-
-          SUBROUTINE h5dwrite_real_3(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            REAL, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwrite_real_3_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_real_3_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REAL_3_C'::h5dwrite_real_3_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              REAL, INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3)) :: buf
-              END FUNCTION h5dwrite_real_3_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwrite_real_3_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dwrite_real_3
-
-          SUBROUTINE h5dwrite_real_4(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            REAL, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwrite_real_4_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_real_4_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REAL_4_C'::h5dwrite_real_4_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              REAL, INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-              END FUNCTION h5dwrite_real_4_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwrite_real_4_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dwrite_real_4
-
-          SUBROUTINE h5dwrite_real_5(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            REAL, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwrite_real_5_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_real_5_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REAL_5_C'::h5dwrite_real_5_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              REAL, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-              END FUNCTION h5dwrite_real_5_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwrite_real_5_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dwrite_real_5
-
-          SUBROUTINE h5dwrite_real_6(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            REAL, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwrite_real_6_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_real_6_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REAL_6_C'::h5dwrite_real_6_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              REAL, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-              END FUNCTION h5dwrite_real_6_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwrite_real_6_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dwrite_real_6
-
-          SUBROUTINE h5dwrite_real_7(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            REAL, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwrite_real_7_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_real_7_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REAL_7_C'::h5dwrite_real_7_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              REAL, INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-              END FUNCTION h5dwrite_real_7_c
-            END INTERFACE
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwrite_real_7_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dwrite_real_7
-
-!----------------------------------------------------------------------
-! Name:		h5dread_f
-!
-! Purpose: 	Reads raw data from the specified dataset into buf,
-!		converting from file datatype and dataspace to memory
-!		datatype and dataspace.
-!
-! Inputs:
-!		dset_id		- dataset identifier
-!		mem_type_id	- memory type identifier
-!		dims		- 1-dim array of size 7; dims(k) has the size
-!				- of k-th dimension of the buf array
-! Outputs:
-!		buf		- buffer to read data in
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!		mem_space_id	- memory dataspace identifier
-!		file_space_id 	- file dataspace identifier
-!		xfer_prp	- trasfer 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
-!
-!                       dims parameter was added to make code portable;
-!                       n parameter was replaced with dims parameter in
-!			the h5dwrite_reference_obj and h5dwrite_reference_dsetreg
-!			functions.  April 2, 2001
-!
-! Comment:		This function is overloaded to read INTEGER,
-!			REAL, DOUBLE PRECISION and CHARACTER buffers
-!			up to 7 dimensions, and one dimensional buffers
-!			of the TYPE(hobj_ref_t_f) and TYPE(hdset_reg_ref_t_f)
-!			types.
-!----------------------------------------------------------------------
-          SUBROUTINE h5dread_reference_obj(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            TYPE(hobj_ref_t_f), INTENT(INOUT) , &
-            DIMENSION(dims(1)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-            INTEGER(HADDR_T), ALLOCATABLE, DIMENSION(:) :: ref_buf
-            INTEGER :: j
-
-!            INTEGER, EXTERNAL :: h5dread_ref_obj_c
-! MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_ref_obj_c(dset_id, mem_type_id,&
-                                                  mem_space_id_default, &
-                               file_space_id_default, xfer_prp_default, ref_buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REF_OBJ_C'::h5dread_ref_obj_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER(HADDR_T), DIMENSION(*) :: ref_buf
-              END FUNCTION h5dread_ref_obj_c
-            END INTERFACE
-
-            allocate(ref_buf(dims(1)), stat=hdferr)
-            if (hdferr .NE. 0) then
-                hdferr = -1
-                return
-            endif
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_ref_obj_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, ref_buf, dims)
-             do j = 1, dims(1)
-                buf(j)%ref = ref_buf(j)
-             enddo
-             deallocate(ref_buf)
-          END SUBROUTINE h5dread_reference_obj
-
-          SUBROUTINE h5dread_reference_dsetreg(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            TYPE(hdset_reg_ref_t_f), INTENT(INOUT), &
-            DIMENSION(dims(1)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-            INTEGER, ALLOCATABLE, DIMENSION(:) :: ref_buf
-            INTEGER :: i,j
-
-!            INTEGER, EXTERNAL :: h5dread_ref_reg_c
-! MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_ref_reg_c(dset_id, mem_type_id,&
-                                                  mem_space_id_default, &
-                               file_space_id_default, xfer_prp_default, ref_buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REF_REG_C'::h5dread_ref_reg_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, DIMENSION(*) :: ref_buf
-              END FUNCTION h5dread_ref_reg_c
-            END INTERFACE
-
-            allocate(ref_buf(REF_REG_BUF_LEN*dims(1)), stat=hdferr)
-            if (hdferr .NE. 0) then
-                hdferr = -1
-                return
-            endif
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_ref_reg_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, ref_buf, dims)
-
-            do j = 1, dims(1)
-             do i = 1, REF_REG_BUF_LEN
-                   buf(j)%ref(i) = ref_buf(REF_REG_BUF_LEN*(j-1) + i)
-             enddo
-            enddo
-            deallocate(ref_buf)
-          END SUBROUTINE h5dread_reference_dsetreg
-
-
-          SUBROUTINE h5dread_integer_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            INTEGER, INTENT(INOUT) :: buf ! Data buffer
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dread_integer_s_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_integer_s_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_INTEGER_S_C'::h5dread_integer_s_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, INTENT(OUT) :: buf
-              END FUNCTION h5dread_integer_s_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_integer_s_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_integer_scalar
-
-          SUBROUTINE h5dread_integer_1(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            INTEGER, INTENT(INOUT), &
-            DIMENSION(dims(1)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dread_integer_1_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_integer_1_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_INTEGER_1_C'::h5dread_integer_1_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, INTENT(OUT), &
-              DIMENSION(dims(1)) :: buf
-              END FUNCTION h5dread_integer_1_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_integer_1_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_integer_1
-
-          SUBROUTINE h5dread_integer_2(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            INTEGER, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dread_integer_2_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_integer_2_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_INTEGER_2_C'::h5dread_integer_2_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, INTENT(OUT), &
-              DIMENSION(dims(1),dims(2)) :: buf
-              END FUNCTION h5dread_integer_2_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_integer_2_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims)
-
-          END SUBROUTINE h5dread_integer_2
-
-          SUBROUTINE h5dread_integer_3(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            INTEGER, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dread_integer_3_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_integer_3_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_INTEGER_3_C'::h5dread_integer_3_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, INTENT(OUT), &
-              DIMENSION(dims(1),dims(2),dims(3)) :: buf
-              END FUNCTION h5dread_integer_3_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_integer_3_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims)
-
-          END SUBROUTINE h5dread_integer_3
-
-          SUBROUTINE h5dread_integer_4(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            INTEGER, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dread_integer_4_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_integer_4_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_INTEGER_4_C'::h5dread_integer_4_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, INTENT(OUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-              END FUNCTION h5dread_integer_4_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_integer_4_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims)
-
-          END SUBROUTINE h5dread_integer_4
-
-          SUBROUTINE h5dread_integer_5(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            INTEGER, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dread_integer_5_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_integer_5_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_INTEGER_5_C'::h5dread_integer_5_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-              END FUNCTION h5dread_integer_5_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_integer_5_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims)
-
-          END SUBROUTINE h5dread_integer_5
-
-          SUBROUTINE h5dread_integer_6(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            INTEGER, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dread_integer_6_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_integer_6_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_INTEGER_6_C'::h5dread_integer_6_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-              END FUNCTION h5dread_integer_6_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_integer_6_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims)
-
-          END SUBROUTINE h5dread_integer_6
-
-          SUBROUTINE h5dread_integer_7(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            INTEGER, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dread_integer_7_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_integer_7_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_INTEGER_7_C'::h5dread_integer_7_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-              END FUNCTION h5dread_integer_7_c
-            END INTERFACE
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_integer_7_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims)
-
-          END SUBROUTINE h5dread_integer_7
-
-          SUBROUTINE h5dread_char_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            CHARACTER(LEN=*), INTENT(INOUT) :: buf ! Data buffer
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dreadc_s_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dreadc_s_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREADC_S_C'::h5dreadc_s_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              CHARACTER(LEN=*), INTENT(OUT) :: buf
-              END FUNCTION h5dreadc_s_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dreadc_s_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_char_scalar
-
-          SUBROUTINE h5dread_char_1(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            CHARACTER(LEN=*), INTENT(INOUT), &
-            DIMENSION(dims(1)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dreadc_1_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dreadc_1_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREADC_1_C'::h5dreadc_1_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              CHARACTER(LEN=*), INTENT(INOUT), &
-              DIMENSION(dims(1)) :: buf
-              END FUNCTION h5dreadc_1_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dreadc_1_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_char_1
-
-          SUBROUTINE h5dread_char_2(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            CHARACTER(LEN=*), INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dreadc_2_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dreadc_2_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREADC_2_C'::h5dreadc_2_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              CHARACTER(LEN=*), INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2)) :: buf
-              END FUNCTION h5dreadc_2_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dreadc_2_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_char_2
-
-          SUBROUTINE h5dread_char_3(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            CHARACTER(LEN=*), INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dreadc_3_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dreadc_3_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREADC_3_C'::h5dreadc_3_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              CHARACTER(LEN=*), INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3)) :: buf
-              END FUNCTION h5dreadc_3_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dreadc_3_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_char_3
-
-          SUBROUTINE h5dread_char_4(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            CHARACTER(LEN=*), INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dreadc_4_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dreadc_4_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREADC_4_C'::h5dreadc_4_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              CHARACTER(LEN=*), INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-              END FUNCTION h5dreadc_4_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dreadc_4_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_char_4
-
-          SUBROUTINE h5dread_char_5(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            CHARACTER(LEN=*), INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dreadc_5_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dreadc_5_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREADC_5_C'::h5dreadc_5_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              CHARACTER(LEN=*), INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-              END FUNCTION h5dreadc_5_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dreadc_5_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_char_5
-
-          SUBROUTINE h5dread_char_6(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            CHARACTER(LEN=*), INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dreadc_6_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dreadc_6_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREADC_6_C'::h5dreadc_6_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              CHARACTER(LEN=*), INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-              END FUNCTION h5dreadc_6_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dreadc_6_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_char_6
-
-          SUBROUTINE h5dread_char_7(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            CHARACTER(LEN=*), INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dreadc_7_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dreadc_7_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREADC_7_C'::h5dreadc_7_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              CHARACTER(LEN=*), INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-              END FUNCTION h5dreadc_7_c
-            END INTERFACE
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dreadc_7_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_char_7
-
-          SUBROUTINE h5dread_real_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            REAL, INTENT(INOUT) :: buf ! Data buffer
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dread_real_s_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_real_s_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REAL_S_C'::h5dread_real_s_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              REAL, INTENT(OUT) :: buf
-              END FUNCTION h5dread_real_s_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_real_s_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_real_scalar
-
-          SUBROUTINE h5dread_real_1(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            REAL, INTENT(INOUT), &
-            DIMENSION(dims(1)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dread_real_1_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_real_1_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REAL_1_C'::h5dread_real_1_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              REAL, INTENT(INOUT), &
-              DIMENSION(dims(1)) :: buf
-              END FUNCTION h5dread_real_1_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_real_1_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_real_1
-
-          SUBROUTINE h5dread_real_2(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            REAL, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dread_real_2_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_real_2_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REAL_2_C'::h5dread_real_2_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              REAL, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2)) :: buf
-              END FUNCTION h5dread_real_2_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_real_2_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_real_2
-
-          SUBROUTINE h5dread_real_3(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            REAL, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dread_real_3_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_real_3_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REAL_3_C'::h5dread_real_3_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              REAL, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3)) :: buf
-              END FUNCTION h5dread_real_3_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_real_3_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_real_3
-
-          SUBROUTINE h5dread_real_4(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            REAL, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3), dims(4)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dread_real_4_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_real_4_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REAL_4_C'::h5dread_real_4_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              REAL, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3), dims(4)) :: buf
-              END FUNCTION h5dread_real_4_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_real_4_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_real_4
-
-          SUBROUTINE h5dread_real_5(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            REAL, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dread_real_5_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_real_5_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REAL_5_C'::h5dread_real_5_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              REAL, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-              END FUNCTION h5dread_real_5_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_real_5_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_real_5
-
-          SUBROUTINE h5dread_real_6(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            REAL, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dread_real_6_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_real_6_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REAL_6_C'::h5dread_real_6_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              REAL, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-              END FUNCTION h5dread_real_6_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_real_6_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_real_6
-
-          SUBROUTINE h5dread_real_7(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            REAL, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dread_real_7_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_real_7_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REAL_7_C'::h5dread_real_7_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              REAL, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-              END FUNCTION h5dread_real_7_c
-            END INTERFACE
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_real_7_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_real_7
-
-!----------------------------------------------------------------------
-! Name:		h5dget_space_f
-!
-! Purpose:	Returns an identifier for a copy of the dataspace for a
-!		dataset.
-!
-! Inputs:
-!		dataset_id	- dataset identifier
-! Outputs:
-!		dataspace_id	- dataspace 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 h5dget_space_f(dataset_id, dataspace_id, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dataset_id      ! Dataset identifier
-            INTEGER(HID_T), INTENT(OUT) :: dataspace_id   ! Dataspace identifier
-            INTEGER, INTENT(OUT) :: hdferr                ! Error code
-
-!            INTEGER, EXTERNAL :: h5dget_space_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dget_space_c(dataset_id, dataspace_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DGET_SPACE_C'::h5dget_space_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dataset_id
-              INTEGER(HID_T), INTENT(OUT) :: dataspace_id
-              END FUNCTION h5dget_space_c
-            END INTERFACE
-
-            hdferr = h5dget_space_c(dataset_id, dataspace_id)
-          END SUBROUTINE h5dget_space_f
-
-!----------------------------------------------------------------------
-! Name:		h5dget_type_f
-!
-! Purpose:	Returns an identifier for a copy of the datatype for a
-!		dataset.
-!
-! Inputs:
-!		dataset_id	- dataset identifier
-! Outputs:
-!		datatype_id	- dataspace 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 h5dget_type_f(dataset_id, datatype_id, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dataset_id      ! Dataset identifier
-            INTEGER(HID_T), INTENT(OUT) :: datatype_id    ! Datatype identifier
-            INTEGER, INTENT(OUT) :: hdferr                ! Error code
-!            INTEGER, EXTERNAL :: h5dget_type_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dget_type_c (dataset_id, datatype_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DGET_TYPE_C'::h5dget_type_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dataset_id
-              INTEGER(HID_T), INTENT(OUT) :: datatype_id
-              END FUNCTION h5dget_type_c
-            END INTERFACE
-
-            hdferr = h5dget_type_c (dataset_id, datatype_id)
-          END SUBROUTINE h5dget_type_f
-
-!----------------------------------------------------------------------
-! Name:		h5dset_extent (instead of obsolete name: h5dextend_f)
-!
-! Purpose:	Extends a dataset with unlimited dimension.
-!
-! Inputs:
-!		dataset_id	- dataset identifier
-!		size		- array containing the new magnitude of
-!				  each dimension
-! 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
-!
-!                       Changed name from the now obsolete h5dextend_f
-!                       to h5dset_extent_f. Provided interface to old name
-!                       for backward compatability. -MSB- March 14, 2008
-!
-! Comment:
-!----------------------------------------------------------------------
-
-
-  SUBROUTINE h5dset_extent_f(dataset_id, size, hdferr)
-    IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: dataset_id      ! Dataset identifier
-    INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN)  :: size
-    ! Array containing
-    ! dimensions' sizes
-    INTEGER, INTENT(OUT) :: hdferr                ! Error code
-
-    !
-    !  MS FORTRAN needs explicit interface for C functions called here.
-    !
-    INTERFACE
-       INTEGER FUNCTION h5dset_extent_c(dataset_id, size)
-         USE H5GLOBAL
-         !DEC$IF DEFINED(HDF5F90_WINDOWS)
-         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DSET_EXTENT_C'::h5dset_extent_c
-         !DEC$ENDIF
-         INTEGER(HID_T), INTENT(IN) :: dataset_id
-         INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN)  :: size
-       END FUNCTION h5dset_extent_c
-    END INTERFACE
-
-    hdferr = H5Dset_extent_c(dataset_id, size)
-  END SUBROUTINE h5dset_extent_f
-
-
-!----------------------------------------------------------------------
-! Name:		h5dget_create_plist_f
-!
-! Purpose:	Returns an identifier for a copy of the dataset creation
-!		property list for a dataset.
-!
-! Inputs:
-!		dataset_id	- dataset identifier
-! Outputs:
-!		plist_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 h5dget_create_plist_f(dataset_id, plist_id, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dataset_id      ! Dataset identifier
-            INTEGER(HID_T), INTENT(OUT) :: plist_id    ! Dataset creation
-                                                  ! property list identifier
-            INTEGER, INTENT(OUT) :: hdferr                ! Error code
-
-!            INTEGER, EXTERNAL :: h5dget_create_plist_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dget_create_plist_c(dataset_id, plist_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DGET_CREATE_PLIST_C'::h5dget_create_plist_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dataset_id
-              INTEGER(HID_T), INTENT(OUT) :: plist_id
-              END FUNCTION h5dget_create_plist_c
-            END INTERFACE
-
-            hdferr = h5dget_create_plist_c(dataset_id, plist_id)
-          END SUBROUTINE h5dget_create_plist_f
-
-!----------------------------------------------------------------------
-! Name:		h5dget_storage_size_f
-!
-! Purpose:	Returns the amount of storage requires by a dataset
-!
-! Inputs:
-!		dataset_id	- dataset identifier
-! Outputs:
-!		size		- datastorage size
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		October 15, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5dget_storage_size_f(dataset_id, size, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dataset_id      ! Dataset identifier
-            INTEGER(HSIZE_T),  INTENT(OUT)  :: size
-                                                          ! Amount of storage
-                                                          ! allocated for dataset
-            INTEGER, INTENT(OUT) :: hdferr                ! Error code
-
-            INTERFACE
-              INTEGER FUNCTION h5dget_storage_size_c(dataset_id, size)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DGET_STORAGE_SIZE_C'::h5dget_storage_size_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dataset_id
-              INTEGER(HSIZE_T), INTENT(OUT)  :: size
-              END FUNCTION h5dget_storage_size_c
-            END INTERFACE
-
-            hdferr = h5dget_storage_size_c(dataset_id, size)
-          END SUBROUTINE h5dget_storage_size_f
-
-!----------------------------------------------------------------------
-! Name:		h5dvlen_get_max_len_f
-!
-! Purpose:	Returns maximum lenght of the VL array elements
-!
-! Inputs:
-!		dataset_id	- dataset identifier
-!		type_id		- datatype identifier
-!		space_id	- dataspace identifier
-! Outputs:
-!		size		- buffer size
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		October 15, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5dvlen_get_max_len_f(dataset_id, type_id, space_id, len,  hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dataset_id      ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: type_id         ! Datatype identifier
-            INTEGER(HID_T), INTENT(IN) :: space_id        ! Dataspace identifier
-            INTEGER(SIZE_T),  INTENT(OUT)  :: len         ! Maximum length of the element
-            INTEGER, INTENT(OUT) :: hdferr                ! Error code
-
-            INTERFACE
-              INTEGER FUNCTION h5dvlen_get_max_len_c(dataset_id, type_id, space_id, len)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DVLEN_GET_MAX_LEN_C'::h5dvlen_get_max_len_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dataset_id
-              INTEGER(HID_T), INTENT(IN) :: type_id
-              INTEGER(HID_T), INTENT(IN) :: space_id
-              INTEGER(SIZE_T), INTENT(OUT)  :: len
-              END FUNCTION h5dvlen_get_max_len_c
-            END INTERFACE
-
-            hdferr = h5dvlen_get_max_len_c(dataset_id, type_id,  space_id, len)
-          END SUBROUTINE h5dvlen_get_max_len_f
-
-          SUBROUTINE h5dwrite_vl_integer(dset_id, mem_type_id, buf, dims, len, &
-                                         hdferr, &
-                                         mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims ! MAX len x num_elem
-            INTEGER(SIZE_T), INTENT(IN), DIMENSION(*) :: len ! Array to store
-                                                              ! the lenght of each
-                                                              ! element
-            INTEGER, INTENT(IN), &
-            DIMENSION(dims(1),dims(2)) :: buf   ! Data buffer
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_vl_integer_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims, len)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_VL_INTEGER_C'::h5dwrite_vl_integer_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER(SIZE_T), INTENT(IN), DIMENSION(*) :: len
-              INTEGER, INTENT(IN), &
-              DIMENSION(dims(1),dims(2)) :: buf
-              END FUNCTION h5dwrite_vl_integer_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwrite_vl_integer_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims, len)
-
-          END SUBROUTINE h5dwrite_vl_integer
-
-          SUBROUTINE h5dread_vl_integer(dset_id, mem_type_id, buf, dims, len, &
-                                         hdferr, &
-                                         mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims ! MAX len x num_elem
-            INTEGER(SIZE_T), INTENT(INOUT), DIMENSION(*) :: len ! Array to store
-                                                              ! the lenght of each
-                                                              ! element
-            INTEGER, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2)) :: buf   ! Data buffer
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-                                                ! -1 if failed, 0 otherwise
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-            INTEGER(HID_T) :: tmp
-            INTEGER :: error
-
-            INTERFACE
-              INTEGER FUNCTION h5dread_vl_integer_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims, len)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_VL_INTEGER_C'::h5dread_vl_integer_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER(SIZE_T), INTENT(INOUT), DIMENSION(*) :: len
-              INTEGER, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2)) :: buf
-              END FUNCTION h5dread_vl_integer_c
-            END INTERFACE
-
-            CALL h5dget_space_f(dset_id, tmp, error)
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = tmp
-            file_space_id_default = tmp
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_vl_integer_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims, len)
-
-          END SUBROUTINE h5dread_vl_integer
-
-          SUBROUTINE h5dwrite_vl_real(dset_id, mem_type_id, buf, dims, len, &
-                                         hdferr, &
-                                         mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims ! MAX len x num_elem
-            INTEGER(SIZE_T), INTENT(IN), DIMENSION(*) :: len ! Array to store
-                                                              ! the lenght of each
-                                                              ! element
-            REAL, INTENT(IN), &
-            DIMENSION(dims(1),dims(2)) :: buf   ! Data buffer
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_vl_real_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims, len)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_VL_REAL_C'::h5dwrite_vl_real_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER(SIZE_T), INTENT(IN), DIMENSION(*) :: len
-              REAL, INTENT(IN), &
-              DIMENSION(dims(1),dims(2)) :: buf
-              END FUNCTION h5dwrite_vl_real_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwrite_vl_real_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims, len)
-
-          END SUBROUTINE h5dwrite_vl_real
-
-          SUBROUTINE h5dread_vl_real(dset_id, mem_type_id, buf, dims, len, &
-                                         hdferr, &
-                                         mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims ! MAX len x num_elem
-            INTEGER(SIZE_T), INTENT(INOUT), DIMENSION(*) :: len ! Array to store
-                                                              ! the lenght of each
-                                                              ! element
-            REAL, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2)) :: buf   ! Data buffer
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-                                                ! -1 if failed, 0 otherwise
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-            INTEGER(HID_T) :: tmp
-            INTEGER :: error
-
-            INTERFACE
-              INTEGER FUNCTION h5dread_vl_real_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims, len)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_VL_REAL_C'::h5dread_vl_real_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER(SIZE_T), INTENT(INOUT), DIMENSION(*) :: len
-              REAL, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2)) :: buf
-              END FUNCTION h5dread_vl_real_c
-            END INTERFACE
-
-            CALL h5dget_space_f(dset_id, tmp, error)
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = tmp
-            file_space_id_default = tmp
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_vl_real_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims, len)
-
-          END SUBROUTINE h5dread_vl_real
-
-          SUBROUTINE h5dwrite_vl_string(dset_id, mem_type_id, buf, dims, str_len, &
-                                         hdferr, &
-                                         mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims ! number of strings
-            INTEGER(SIZE_T), INTENT(IN), DIMENSION(*) :: str_len ! Array to store
-                                                              ! the lenght of each
-                                                              ! element
-            CHARACTER(LEN=*), INTENT(IN), &
-            DIMENSION(dims(2)) :: buf           ! Data buffer
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-!            CHARACTER, DIMENSION(dims(1)*dims(2)) :: tmp_buf
-
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_vl_string_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-!                                          xfer_prp_default, tmp_buf, dims, str_len)
-                                          xfer_prp_default, buf, dims, str_len)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_VL_STRING_C'::h5dwrite_vl_string_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims
-              INTEGER(SIZE_T), INTENT(IN), DIMENSION(*) :: str_len
-!              CHARACTER, INTENT(IN), &
-!              DIMENSION(dims(1)*dims(2)) :: tmp_buf
-              CHARACTER(LEN=*), DIMENSION(dims(2)) :: buf
-              END FUNCTION h5dwrite_vl_string_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-!            do i = 1, dims(2)
-!               do j = 1, dims(1)
-!               tmp_buf((i-1)*dims(1) +j) = buf(i)(j:j)
-!               enddo
-!            enddo
-!              write(*,*) (tmp_buf(j:j), j=1,dims(1)*dims(2))
-!              write(*,*) str_len(1), str_len(2), str_len(3), str_len(4)
-
-            hdferr = h5dwrite_vl_string_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims, str_len)
-
-          END SUBROUTINE h5dwrite_vl_string
-
-          SUBROUTINE h5dread_vl_string(dset_id, mem_type_id, buf, dims, str_len, &
+  SUBROUTINE h5dread_vl_string(dset_id, mem_type_id, buf, dims, str_len, &
                                          hdferr, &
                                          mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims ! number of strings
-            INTEGER(SIZE_T), INTENT(OUT), DIMENSION(*) :: str_len ! Array to store
-                                                              ! the lenght of each
-                                                              ! element
-            CHARACTER(LEN=*), INTENT(OUT), &
-            DIMENSION(dims(2)) :: buf           ! Data buffer
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                               ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-!            CHARACTER, DIMENSION(dims(1)*dims(2)) :: tmp_buf
-!            integer i, j
-
-            INTERFACE
-              INTEGER FUNCTION h5dread_vl_string_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-!                                          xfer_prp_default, tmp_buf, dims, str_len)
-                                          xfer_prp_default, buf, dims, str_len)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_VL_STRING_C'::h5dread_vl_string_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims
-              INTEGER(SIZE_T), INTENT(OUT), DIMENSION(*) :: str_len
-!              CHARACTER, INTENT(IN), &
-!              DIMENSION(dims(1)*dims(2)) :: tmp_buf
-              CHARACTER(LEN=*), DIMENSION(dims(2)) :: buf
-              END FUNCTION h5dread_vl_string_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-!            do i = 1, dims(2)
-!               do j = 1, dims(1)
-!               tmp_buf((i-1)*dims(1) +j) = buf(i)(j:j)
-!               enddo
-!            enddo
-!              write(*,*) (tmp_buf(j:j), j=1,dims(1)*dims(2))
-!              write(*,*) str_len(1), str_len(2), str_len(3), str_len(4)
-
-            hdferr = h5dread_vl_string_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims, str_len)
-          RETURN
-          END SUBROUTINE h5dread_vl_string
-
-!----------------------------------------------------------------------
-! Name:		h5dfill_integer
-!
-! Purpose:      Fills dataspace elements with a fill value in a memory buffer.
-!               Only INTEGER, CHARACTER, REAL and DOUBLE PRECISION datatypes
-!               of the fillvalues and buffers are supported. Buffer and fillvalue
-!               are assumed to have the same datatype.
-!               Only one-dimesional buffers are supported.
-!
-! Inputs:
-!		fill_value	- fill value
-!		space_id	- memory space selection identifier
-!		buf		- data buffer iin memory ro apply selection to
-!				- of k-th dimension of the buf array
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-!
-! Programmer:	Elena Pourmal
-!		March 12, 2003
-!
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5dfill_integer(fill_value, space_id, buf,  hdferr)
-            IMPLICIT NONE
-            INTEGER, INTENT(IN) :: fill_value  ! Fill value
-            INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier
-            INTEGER, INTENT(IN), DIMENSION(*) :: buf ! Memory buffer to fill in
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-
-            INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier
-            INTEGER(HID_T) :: mem_type_id !  Buffer dadtype identifier
-
-!            INTEGER, EXTERNAL :: h5dfill_integer_c
-! MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dfill_integer_c(fill_value, fill_type_id, space_id, &
-                                         buf, mem_type_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DFILL_INTEGER_C'::h5dfill_integer_c
-              !DEC$ENDIF
-              INTEGER, INTENT(IN) :: fill_value  ! Fill value
-              INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier
-              INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier
-              INTEGER, INTENT(IN), DIMENSION(*) :: buf ! Memory buffer to fill in
-              INTEGER(HID_T) :: mem_type_id !  Buffer dadtype identifier
-              END FUNCTION h5dfill_integer_c
-            END INTERFACE
-            fill_type_id = H5T_NATIVE_INTEGER
-            mem_type_id  = H5T_NATIVE_INTEGER
-
-            hdferr = h5dfill_integer_c(fill_value, fill_type_id, space_id, &
-                               buf, mem_type_id)
-
-          END SUBROUTINE h5dfill_integer
-
-!----------------------------------------------------------------------
-! Name:		h5dfill_real
-!
-! Purpose:      Fills dataspace elements with a fill value in a memory buffer.
-!               Only INTEGER, CHARACTER, REAL and DOUBLE PRECISION datatypes
-!               of the fillvalues and buffers are supported. Buffer and fillvalue
-!               are assumed to have the same datatype.
-!               Only one-dimesional buffers are supported.
-!
-! Inputs:
-!		fill_value	- fill value
-!		space_id	- memory space selection identifier
-!		buf		- data buffer iin memory ro apply selection to
-!				- of k-th dimension of the buf array
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-!
-! Programmer:	Elena Pourmal
-!		March 12, 2003
-!
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5dfill_real(fill_valuer, space_id, buf,  hdferr)
-            IMPLICIT NONE
-            REAL, INTENT(IN) :: fill_valuer  ! Fill value
-            INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier
-            REAL, INTENT(IN), DIMENSION(*) :: buf ! Memory buffer to fill in
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-
-            INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier
-            INTEGER(HID_T) :: mem_type_id !  Buffer dadtype identifier
-
-!            INTEGER, EXTERNAL :: h5dfill_real_c
-! MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dfill_real_c(fill_valuer, fill_type_id, space_id, &
-                                         buf, mem_type_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DFILL_REAL_C'::h5dfill_real_c
-              !DEC$ENDIF
-              REAL, INTENT(IN) :: fill_valuer  ! Fill value
-              INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier
-              INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier
-              REAL, INTENT(IN), DIMENSION(*) :: buf ! Memory buffer to fill in
-              INTEGER(HID_T) :: mem_type_id !  Buffer dadtype identifier
-              END FUNCTION h5dfill_real_c
-            END INTERFACE
-            fill_type_id = H5T_NATIVE_REAL
-            mem_type_id  = H5T_NATIVE_REAL
-
-            hdferr = h5dfill_real_c(fill_valuer, fill_type_id, space_id, &
-                               buf, mem_type_id)
-          END SUBROUTINE h5dfill_real
-
-!----------------------------------------------------------------------
-! Name:		h5dfill_char
-!
-! Purpose:      Fills dataspace elements with a fill value in a memory buffer.
-!               Only INTEGER, CHARACTER, REAL and DOUBLE PRECISION datatypes
-!               of the fillvalues and buffers are supported. Buffer and fillvalue
-!               are assumed to have the same datatype.
-!               Only one-dimesional buffers are supported.
-!
-! Inputs:
-!		fill_value	- fill value
-!		space_id	- memory space selection identifier
-!		buf		- data buffer iin memory ro apply selection to
-!				- of k-th dimension of the buf array
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-!
-! Programmer:	Elena Pourmal
-!		March 12, 2003
-!
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5dfill_char(fill_value, space_id, buf,  hdferr)
-            IMPLICIT NONE
-            CHARACTER, INTENT(IN) :: fill_value  ! Fill value
-            INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier
-            CHARACTER, INTENT(IN), DIMENSION(*) :: buf ! Memory buffer to fill in
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-
-            INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier
-            INTEGER(HID_T) :: mem_type_id !  Buffer dadtype identifier
-
-!            INTEGER, EXTERNAL :: h5dfillc_c
-! MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dfillc_c(fill_value, fill_type_id, space_id, &
-                                         buf, mem_type_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DFILLC_C'::h5dfillc_c
-              !DEC$ENDIF
-              CHARACTER, INTENT(IN) :: fill_value  ! Fill value
-              INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier
-              INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier
-              CHARACTER, INTENT(IN), DIMENSION(*) :: buf ! Memory buffer to fill in
-              INTEGER(HID_T) :: mem_type_id !  Buffer dadtype identifier
-              END FUNCTION h5dfillc_c
-            END INTERFACE
-            fill_type_id = H5T_NATIVE_CHARACTER
-            mem_type_id  = H5T_NATIVE_CHARACTER
-
-            hdferr = h5dfillc_c(fill_value, fill_type_id, space_id, &
-                               buf, mem_type_id)
-
-          END SUBROUTINE h5dfill_char
-
-!----------------------------------------------------------------------
-! Name:		h5dget_space_status_f
-!
-! Purpose:      Returns the status of data space allocation.
-!
-! Inputs:
-!		dset_id		- dataset identifier
-! Outputs:
-!               flag            - status; may have one of the following values:
-!				  H5D_SPACE_STS_ERROR_F
-!				  H5D_SPACE_STS_NOT_ALLOCATED_F
-!				  H5D_SPACE_STS_PART_ALLOCATED_F
-!				  H5D_SPACE_STS_ALLOCATED_F
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-!
-! Programmer:	Elena Pourmal
-!		March 12, 2003
-!
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5dget_space_status_f(dset_id, flag, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id  ! Dataspace identifier
-            INTEGER, INTENT(IN)        :: flag     ! Memory buffer to fill in
-            INTEGER, INTENT(OUT)       :: hdferr   ! Error code
-
-!            INTEGER, EXTERNAL :: h5dget_space_status_c
-! MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dget_space_status_c(dset_id, flag)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DGET_SPACE_STATUS_C'::h5dget_space_status_c
-              !DEC$ENDIF
-              INTEGER(HID_T) :: dset_id
-              INTEGER        :: flag
-              END FUNCTION h5dget_space_status_c
-            END INTERFACE
-
-            hdferr = h5dget_space_status_c(dset_id, flag)
-          END SUBROUTINE h5dget_space_status_f
-
-!----------------------------------------------------------------------
-! Name:		h5dcreate_anon_f
-!
-! Purpose: 	Creates a dataset in a file without linking it into the file structure
-!
-! Inputs:
-!		loc_id		- Identifier of the file or group within which to create the dataset.
-!		type_id		- Identifier of the datatype to use when creating the dataset.
-!		space_id	- Identifier of the dataspace to use when creating the dataset.
-! Outputs:
-!		dset_id		- dataset identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!               dcpl_id         - Dataset creation property list identifier.
-!               dapl_id  	- Dataset access property list identifier.
-!
-! Programmer:   M. Scot Breitenfeld
-!		February 11, 2008
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-  SUBROUTINE h5dcreate_anon_f(loc_id, type_id, space_id, dset_id, hdferr, dcpl_id, dapl_id)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier.
-    INTEGER(HID_T), INTENT(IN) :: type_id  ! Datatype identifier.
-    INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier.
-    INTEGER(HID_T), INTENT(OUT) :: dset_id ! Dataset identifier.
-    INTEGER, INTENT(OUT) :: hdferr         ! Error code.
-    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: dcpl_id  ! Dataset creation property list identifier.
-    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: dapl_id  ! Dataset access property list identifier.
-
-    INTEGER(HID_T) :: dcpl_id_default
-    INTEGER(HID_T) :: dapl_id_default
+    INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims ! number of strings
+    INTEGER(SIZE_T), INTENT(OUT), DIMENSION(*) :: str_len ! Array to store
+    ! the length of each
+    ! element
+    CHARACTER(LEN=*), INTENT(OUT), &
+         DIMENSION(dims(2)) :: buf      ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
 
-!
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
-       INTEGER FUNCTION h5dcreate_anon_c(loc_id, type_id, space_id, dcpl_id_default, dapl_id_default, dset_id)
+       INTEGER FUNCTION h5dread_vl_string_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims, str_len)
          USE H5GLOBAL
          !DEC$IF DEFINED(HDF5F90_WINDOWS)
-         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DCREATE_ANON_C'::h5dcreate_anon_c
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_VL_STRING_C'::h5dread_vl_string_c
          !DEC$ENDIF
-         INTEGER(HID_T), INTENT(IN) :: loc_id
-         INTEGER(HID_T), INTENT(IN) :: type_id
-         INTEGER(HID_T), INTENT(IN) :: space_id
-         INTEGER(HID_T) :: dcpl_id_default
-         INTEGER(HID_T) :: dapl_id_default
-         INTEGER(HID_T), INTENT(OUT) :: dset_id
-       END FUNCTION h5dcreate_anon_c
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims
+         INTEGER(SIZE_T), INTENT(OUT), DIMENSION(*) :: str_len
+         CHARACTER(LEN=*), DIMENSION(dims(2)) :: buf
+       END FUNCTION h5dread_vl_string_c
     END INTERFACE
 
-    dcpl_id_default = H5P_DEFAULT_F
-    dapl_id_default = H5P_DEFAULT_F
-
-    IF(PRESENT(dcpl_id)) dcpl_id_default = dcpl_id
-    IF(PRESENT(dapl_id)) dapl_id_default = dapl_id
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
 
-    hdferr = h5dcreate_anon_c(loc_id, type_id, space_id, dcpl_id_default, dapl_id_default, dset_id)
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
 
-  END SUBROUTINE h5dcreate_anon_f
+    hdferr = h5dread_vl_string_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims, str_len)
+    RETURN
+  END SUBROUTINE h5dread_vl_string
 
-!----------------------------------------------------------------------
-! Name:		h5dget_access_plist_f
 !
-! Purpose: 	Returns a copy of the dataset creation property list.
+!****s* H5D/h5dget_space_f
 !
-! Inputs:
-!		dset_id         - dataset identifier.
-! Outputs:
-!		plist_id	- the dataset access property list identifier.
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
+! NAME
+!  h5dget_space_f
 !
-! Programmer:   M. Scot Breitenfeld
-!		April 13, 2009
+! PURPOSE
+!  Returns an identifier for a copy of the dataspace for a
+!  dataset.
 !
-! Modifications:
+! INPUTS
+!  dataset_id 	 - dataset identifier
+! OUTPUTS
+!  dataspace_id  - dataspace identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-  SUBROUTINE h5dget_access_plist_f(dset_id, plist_id, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
+!
+! SOURCE
+  SUBROUTINE h5dget_space_f(dataset_id, dataspace_id, hdferr)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: dset_id
-    INTEGER(HID_T), INTENT(OUT) :: plist_id
-    INTEGER, INTENT(OUT) :: hdferr         ! Error code.
-
+    INTEGER(HID_T), INTENT(IN) :: dataset_id      ! Dataset identifier
+    INTEGER(HID_T), INTENT(OUT) :: dataspace_id   ! Dataspace identifier
+    INTEGER, INTENT(OUT) :: hdferr                ! Error code
+!*****
     INTERFACE
-       INTEGER FUNCTION h5dget_access_plist_c(dset_id, plist_id)
-         USE H5GLOBAL
-         !DEC$IF DEFINED(HDF5F90_WINDOWS)
-         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DGET_ACCESS_PLIST_C'::h5dget_access_plist_c
-         !DEC$ENDIF
-         INTEGER(HID_T), INTENT(IN) :: dset_id
-         INTEGER(HID_T), INTENT(OUT) :: plist_id
-       END FUNCTION h5dget_access_plist_c
-    END INTERFACE
-
-    hdferr = h5dget_access_plist_c(dset_id, plist_id)
+       INTEGER FUNCTION h5dget_space_c(dataset_id, dataspace_id)
+       USE H5GLOBAL
+       !DEC$IF DEFINED(HDF5F90_WINDOWS)
+       !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DGET_SPACE_C'::h5dget_space_c
+       !DEC$ENDIF
+       INTEGER(HID_T), INTENT(IN) :: dataset_id
+       INTEGER(HID_T), INTENT(OUT) :: dataspace_id
+     END FUNCTION h5dget_space_c
+  END INTERFACE
 
-  END SUBROUTINE h5dget_access_plist_f
+  hdferr = h5dget_space_c(dataset_id, dataspace_id)
+END SUBROUTINE h5dget_space_f
+
+!****s* H5D/h5dget_access_plist_f
+!
+! NAME
+!  h5dget_access_plist_f
+!
+! PURPOSE
+!  Returns a copy of the dataset creation property list.
+!
+! INPUTS
+!  dset_id       - Dataset identifier
+!
+! OUTPUTS
+!  plist_id	 - Dataset access property list identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR   
+!  M. Scot Breitenfeld
+!  April 13, 2009
+!
+! SOURCE
+SUBROUTINE h5dget_access_plist_f(dset_id, plist_id, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN)  :: dset_id
+  INTEGER(HID_T), INTENT(OUT) :: plist_id 
+  INTEGER       , INTENT(OUT) :: hdferr  
+!*****
+  INTERFACE
+     INTEGER FUNCTION h5dget_access_plist_c(dset_id, plist_id)
+       USE H5GLOBAL
+       !DEC$IF DEFINED(HDF5F90_WINDOWS)
+       !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DGET_ACCESS_PLIST_C'::h5dget_access_plist_c
+       !DEC$ENDIF
+       INTEGER(HID_T), INTENT(IN) :: dset_id
+       INTEGER(HID_T), INTENT(OUT) :: plist_id
+     END FUNCTION h5dget_access_plist_c
+  END INTERFACE
+  
+  hdferr = h5dget_access_plist_c(dset_id, plist_id)
+  
+END SUBROUTINE h5dget_access_plist_f
 
 END MODULE H5D
 
diff --git a/fortran/src/H5Dff_F03.f90 b/fortran/src/H5Dff_F03.f90
new file mode 100644
index 0000000..61d5dfc
--- /dev/null
+++ b/fortran/src/H5Dff_F03.f90
@@ -0,0 +1,2404 @@
+!****h* ROBODoc/H5D (F03)
+!
+! NAME
+!  H5D_PROVISIONAL
+!
+! PURPOSE
+!  This file contains Fortran 90 and Fortran 2003 interfaces for H5D functions.
+!  It contains the same functions as H5Dff_F90.f90 but includes the
+!  Fortran 2003 functions and the interface listings. This file will be compiled
+!  instead of H5Dff_F90.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 at hdfgroup.org.       *
+!  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! NOTES
+!  (1) The maximum rank of an array allowed in Fortran is 7, therefore
+!  we only provide an interface for arrays up to and including rank 7.
+!
+!  (2) Unfortunately we are using a generic interface and one of the factors
+!  used in determining the proper routine to select is that of the array
+!  rank being passed. Therefore, we can not create just one subroutine for
+!  each array type (integer, real, etc...) and use a
+!  rank 1 array of assumed size to handle multiple ranks, i.e.
+!  (i.e. integer, dimension(*) :: ... )
+!  (i.e. real   , dimension(*) :: ... ) etc...
+!
+!  (3) Could not place the USE, INTRINSIC :: ISO_C_BINDING in the module header because it may
+!  conflict with the USE, INTRINSIC :: ISO_C_BINDING included in the user's program. Moved
+!  the statement instead to each subroutine.
+!
+!
+!  (4) C_LOC and character strings according to the Fortran 2003 standard:
+!
+!  15.1.2.5 C_LOC(X)
+!
+!  Argument. X shall either
+!
+!  (A) have interoperable type and type parameters and be
+!  (a) a variable that has the TARGET attribute and is interoperable,
+!  (b) an allocated allocatable variable that has the TARGET attribute
+!  and is not an array of zero size, or
+!  (c) an associated scalar pointer, or
+!  (B) be a nonpolymorphic scalar, have no length type parameters, and be
+!  (a) a nonallocatable, nonpointer variable that has the TARGET attribute,
+!  (b) an allocated allocatable variable that has the TARGET attribute, or
+!  (c) an associated pointer.
+!
+!   	 - When X is a character, for interoperability the standard is:
+!
+!  15.2.1 Interoperability of intrinsic types
+!
+!  ...if the type is character, interoperability also requires that the length type parameter
+!  be omitted or be specified by an initialization expression whose value is one.
+!
+!  THEREFORE compilers that have not extended the standard require the
+!  argument in C_LOC to be of the variant:
+!
+!  CHARACTER(LEN=1), TARGET :: chr
+!  or
+!  CHARACTER, TARGET :: chr
+!  
+!                         *** IMPORTANT ***
+!  If you add a new H5D function 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 H5D_PROVISIONAL
+  USE H5GLOBAL
+
+  INTERFACE h5dwrite_f
+
+     MODULE PROCEDURE h5dwrite_reference_obj
+     MODULE PROCEDURE h5dwrite_reference_dsetreg
+     MODULE PROCEDURE h5dwrite_integer_scalar
+     MODULE PROCEDURE h5dwrite_integer_1
+     MODULE PROCEDURE h5dwrite_integer_2
+     MODULE PROCEDURE h5dwrite_integer_3
+     MODULE PROCEDURE h5dwrite_integer_4
+     MODULE PROCEDURE h5dwrite_integer_5
+     MODULE PROCEDURE h5dwrite_integer_6
+     MODULE PROCEDURE h5dwrite_integer_7
+     MODULE PROCEDURE h5dwrite_char_scalar
+     MODULE PROCEDURE h5dwrite_char_1
+     MODULE PROCEDURE h5dwrite_char_2
+     MODULE PROCEDURE h5dwrite_char_3
+     MODULE PROCEDURE h5dwrite_char_4
+     MODULE PROCEDURE h5dwrite_char_5
+     MODULE PROCEDURE h5dwrite_char_6
+     MODULE PROCEDURE h5dwrite_char_7
+     MODULE PROCEDURE h5dwrite_real_scalar
+     MODULE PROCEDURE h5dwrite_real_1
+     MODULE PROCEDURE h5dwrite_real_2
+     MODULE PROCEDURE h5dwrite_real_3
+     MODULE PROCEDURE h5dwrite_real_4
+     MODULE PROCEDURE h5dwrite_real_5
+     MODULE PROCEDURE h5dwrite_real_6
+     MODULE PROCEDURE h5dwrite_real_7
+
+     ! This is the preferred way to call h5dwrite
+     ! by passing an address
+     MODULE PROCEDURE h5dwrite_ptr
+
+  END INTERFACE
+
+  INTERFACE h5dread_f
+
+     MODULE PROCEDURE h5dread_reference_obj
+     MODULE PROCEDURE h5dread_reference_dsetreg
+     MODULE PROCEDURE h5dread_integer_scalar
+     MODULE PROCEDURE h5dread_integer_1
+     MODULE PROCEDURE h5dread_integer_2
+     MODULE PROCEDURE h5dread_integer_3
+     MODULE PROCEDURE h5dread_integer_4
+     MODULE PROCEDURE h5dread_integer_5
+     MODULE PROCEDURE h5dread_integer_6
+     MODULE PROCEDURE h5dread_integer_7
+     MODULE PROCEDURE h5dread_char_scalar
+     MODULE PROCEDURE h5dread_char_1
+     MODULE PROCEDURE h5dread_char_2
+     MODULE PROCEDURE h5dread_char_3
+     MODULE PROCEDURE h5dread_char_4
+     MODULE PROCEDURE h5dread_char_5
+     MODULE PROCEDURE h5dread_char_6
+     MODULE PROCEDURE h5dread_char_7
+     MODULE PROCEDURE h5dread_real_scalar
+     MODULE PROCEDURE h5dread_real_1
+     MODULE PROCEDURE h5dread_real_2
+     MODULE PROCEDURE h5dread_real_3
+     MODULE PROCEDURE h5dread_real_4
+     MODULE PROCEDURE h5dread_real_5
+     MODULE PROCEDURE h5dread_real_6
+     MODULE PROCEDURE h5dread_real_7
+
+     ! This is the preferred way to call h5dread
+     ! by passing an address
+     MODULE PROCEDURE h5dread_ptr
+
+  END INTERFACE
+
+!  Interface for the function used to pass the C pointer of the buffer
+!  to the C H5Dwrite routine
+
+  INTERFACE
+     INTEGER FUNCTION h5dwrite_f_c(dset_id, mem_type_id, &
+          mem_space_id_default ,                         &
+          file_space_id_default,                         &
+          xfer_prp_default, buf )
+       USE H5GLOBAL
+       USE, INTRINSIC :: ISO_C_BINDING
+       !DEC$IF DEFINED(HDF5F90_WINDOWS)
+       !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_F_C'::h5dwrite_f_c
+       !DEC$ENDIF
+       INTEGER(HID_T), INTENT(IN) :: dset_id
+       INTEGER(HID_T), INTENT(IN) :: mem_type_id
+       INTEGER(HID_T) :: mem_space_id_default
+       INTEGER(HID_T) :: file_space_id_default
+       INTEGER(HID_T) :: xfer_prp_default
+       TYPE(C_PTR), VALUE :: buf
+     END FUNCTION h5dwrite_f_c
+  END INTERFACE
+
+!  Interface for the function used to pass the C pointer of the buffer
+!  to the C H5Dread routine
+
+  INTERFACE
+     INTEGER FUNCTION h5dread_f_c(dset_id, mem_type_id, &
+          mem_space_id_default,                         &
+          file_space_id_default,                        &
+          xfer_prp_default, buf)
+       USE H5GLOBAL
+       USE, INTRINSIC :: ISO_C_BINDING
+       !DEC$IF DEFINED(HDF5F90_WINDOWS)
+       !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_F_C'::h5dread_f_c
+       !DEC$ENDIF
+       INTEGER(HID_T), INTENT(IN) :: dset_id
+       INTEGER(HID_T), INTENT(IN) :: mem_type_id
+       INTEGER(HID_T) :: mem_space_id_default
+       INTEGER(HID_T) :: file_space_id_default
+       INTEGER(HID_T) :: xfer_prp_default
+       TYPE(C_PTR), VALUE :: buf
+     END FUNCTION h5dread_f_c
+  END INTERFACE
+
+  INTERFACE h5dfill_f
+     MODULE PROCEDURE h5dfill_integer
+     MODULE PROCEDURE h5dfill_real
+     MODULE PROCEDURE h5dfill_char
+  END INTERFACE
+
+!  Interface for the function used to pass the C pointer of the buffer
+!  to the C H5Dfill routine
+
+  INTERFACE
+     INTEGER FUNCTION h5dfill_c(f_ptr_fill_value, fill_type_id, space_id, &
+          f_ptr_buf, mem_type_id)
+       USE H5GLOBAL
+       USE, INTRINSIC :: ISO_C_BINDING
+       !DEC$IF DEFINED(HDF5F90_WINDOWS)
+       !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DFILL_C'::h5dfill_c
+       !DEC$ENDIF
+       TYPE(C_PTR), VALUE :: f_ptr_fill_value
+       INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier
+       INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier
+       TYPE(C_PTR), VALUE :: f_ptr_buf
+       INTEGER(HID_T) :: mem_type_id
+     END FUNCTION h5dfill_c
+  END INTERFACE
+
+CONTAINS
+
+  SUBROUTINE h5dwrite_reference_obj(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: dims ! size of the bufffer buf
+    TYPE(hobj_ref_t_f), DIMENSION(dims(1)), INTENT(IN), TARGET :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+
+  END SUBROUTINE h5dwrite_reference_obj
+
+  SUBROUTINE h5dwrite_reference_dsetreg(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: dims ! size of the bufffer buf
+    TYPE(hdset_reg_ref_t_f), DIMENSION(dims(1)), INTENT(IN), TARGET :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    INTEGER, ALLOCATABLE, DIMENSION(:) :: ref_buf
+    INTEGER :: i,j
+    TYPE(C_PTR) :: f_ptr
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_ref_reg_c(dset_id, mem_type_id,&
+            mem_space_id_default, &
+            file_space_id_default, xfer_prp_default, ref_buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REF_REG_C'::h5dwrite_ref_reg_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER, DIMENSION(*) :: ref_buf
+         INTEGER(HSIZE_T), DIMENSION(*) ::  dims
+       END FUNCTION h5dwrite_ref_reg_c
+    END INTERFACE
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1))
+
+    ALLOCATE(ref_buf(REF_REG_BUF_LEN*dims(1)), stat=hdferr)
+    IF (hdferr .NE. 0 ) THEN
+       hdferr = -1
+       RETURN
+    ELSE
+       DO j = 1, dims(1)
+          DO i = 1, REF_REG_BUF_LEN
+             ref_buf(REF_REG_BUF_LEN*(j-1) + i) = buf(j)%ref(i)
+          ENDDO
+       ENDDO
+    ENDIF
+    hdferr = h5dwrite_ref_reg_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, ref_buf, dims)
+    DEALLOCATE(ref_buf)
+
+  END SUBROUTINE h5dwrite_reference_dsetreg
+
+
+  SUBROUTINE h5dwrite_integer_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER, INTENT(IN), TARGET :: buf  ! Data buffer
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf)
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_integer_scalar
+
+  SUBROUTINE h5dwrite_integer_1(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_integer_1
+
+  SUBROUTINE h5dwrite_integer_2(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2)),TARGET :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_integer_2
+
+  SUBROUTINE h5dwrite_integer_3(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_integer_3
+
+  SUBROUTINE h5dwrite_integer_4(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr            ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1,1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_integer_4
+
+  SUBROUTINE h5dwrite_integer_5(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1,1,1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_integer_5
+
+  SUBROUTINE h5dwrite_integer_6(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1,1,1,1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_integer_6
+
+  SUBROUTINE h5dwrite_integer_7(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1,1,1,1,1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_integer_7
+
+  SUBROUTINE h5dwrite_char_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(*), INTENT(IN), TARGET :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+                                 
+    CALL h5dwrite_char_scalar_fix(dset_id, mem_type_id, buf, LEN(buf), dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+
+  END SUBROUTINE h5dwrite_char_scalar
+
+  SUBROUTINE h5dwrite_char_scalar_fix(dset_id, mem_type_id, buf, buf_len, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(IN) :: buf_len
+    CHARACTER(LEN=buf_len), INTENT(IN), TARGET :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    f_ptr = C_LOC(buf(1:1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_char_scalar_fix
+
+  SUBROUTINE h5dwrite_char_1(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(IN), DIMENSION(dims(1)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    f_ptr = C_LOC(buf(1)(1:1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_char_1
+
+  SUBROUTINE h5dwrite_char_2(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    f_ptr = C_LOC(buf(1,1)(1:1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_char_2
+
+  SUBROUTINE h5dwrite_char_3(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    f_ptr = C_LOC(buf(1,1,1)(1:1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_char_3
+
+  SUBROUTINE h5dwrite_char_4(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    f_ptr = C_LOC(buf(1,1,1,1)(1:1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_char_4
+
+  SUBROUTINE h5dwrite_char_5(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    f_ptr = C_LOC(buf(1,1,1,1,1)(1:1))
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_char_5
+
+  SUBROUTINE h5dwrite_char_6(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    f_ptr = C_LOC(buf(1,1,1,1,1,1)(1:1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_char_6
+
+  SUBROUTINE h5dwrite_char_7(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    f_ptr = C_LOC(buf(1,1,1,1,1,1,1)(1:1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_char_7
+
+
+  SUBROUTINE h5dwrite_real_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(IN), TARGET :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default  = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf)
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_real_scalar
+
+
+  SUBROUTINE h5dwrite_real_1(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_real_1
+
+  SUBROUTINE h5dwrite_real_2(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_real_2
+
+  SUBROUTINE h5dwrite_real_3(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_real_3
+
+  SUBROUTINE h5dwrite_real_4(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1,1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_real_4
+
+  SUBROUTINE h5dwrite_real_5(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1,1,1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_real_5
+
+  SUBROUTINE h5dwrite_real_6(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1,1,1,1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_real_6
+
+  SUBROUTINE h5dwrite_real_7(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1,1,1,1,1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_real_7
+
+!
+! NAME		
+!  h5dread_f
+!
+! PURPOSE
+!  Reads raw data from the specified dataset into buf,
+!  converting from file datatype and dataspace to memory
+!  datatype and dataspace.
+!
+! Inputs:
+!		dset_id		- dataset identifier
+!		mem_type_id	- memory type identifier
+!		dims		- 1-dim array of size 7; dims(k) has the size
+!				- of k-th dimension of the buf array
+! Outputs:
+!		buf		- buffer to read data in
+!		hdferr:		- error code
+!				 	Success:  0
+!				 	Failure: -1
+! Optional parameters:
+!		mem_space_id	- memory dataspace identifier
+!		file_space_id 	- file dataspace identifier
+!		xfer_prp	- trasfer property list identifier
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY 	
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
+!
+!  dims parameter was added to make code portable;
+!  n parameter was replaced with dims parameter in
+!  the h5dwrite_reference_obj and h5dwrite_reference_dsetreg
+!  functions.  April 2, 2001
+!
+! NOTES	
+!  This function is overloaded to read INTEGER,
+!  REAL, DOUBLE PRECISION and CHARACTER buffers
+!  up to 7 dimensions, and one dimensional buffers
+!  of the TYPE(hobj_ref_t_f) and TYPE(hdset_reg_ref_t_f)
+!  types.
+!
+  SUBROUTINE h5dread_reference_obj(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    TYPE(hobj_ref_t_f), INTENT(INOUT) , &
+         DIMENSION(dims(1)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_reference_obj
+
+  SUBROUTINE h5dread_reference_dsetreg(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    TYPE(hdset_reg_ref_t_f), INTENT(INOUT), &
+         DIMENSION(dims(1)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    INTEGER, ALLOCATABLE, DIMENSION(:) :: ref_buf
+    INTEGER :: i,j
+    INTERFACE
+       INTEGER FUNCTION h5dread_ref_reg_c(dset_id, mem_type_id,&
+            mem_space_id_default, &
+            file_space_id_default, xfer_prp_default, ref_buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REF_REG_C'::h5dread_ref_reg_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, DIMENSION(*) :: ref_buf
+       END FUNCTION h5dread_ref_reg_c
+    END INTERFACE
+
+    ALLOCATE(ref_buf(REF_REG_BUF_LEN*dims(1)), stat=hdferr)
+    IF (hdferr .NE. 0) THEN
+       hdferr = -1
+       RETURN
+    ENDIF
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_ref_reg_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, ref_buf, dims)
+
+    DO j = 1, dims(1)
+       DO i = 1, REF_REG_BUF_LEN
+          buf(j)%ref(i) = ref_buf(REF_REG_BUF_LEN*(j-1) + i)
+       ENDDO
+    ENDDO
+    DEALLOCATE(ref_buf)
+
+  END SUBROUTINE h5dread_reference_dsetreg
+
+
+  SUBROUTINE h5dread_integer_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(INOUT) , TARGET :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf)
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+
+  END SUBROUTINE h5dread_integer_scalar
+
+  SUBROUTINE h5dread_integer_1(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1)) , TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_integer_1
+
+  SUBROUTINE h5dread_integer_2(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2)) , TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_integer_2
+
+  SUBROUTINE h5dread_integer_3(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3)) , TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_integer_3
+
+  SUBROUTINE h5dread_integer_4(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)) , TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1,1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_integer_4
+
+  SUBROUTINE h5dread_integer_5(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) , TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1,1,1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_integer_5
+
+  SUBROUTINE h5dread_integer_6(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) , TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1,1,1,1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_integer_6
+
+  SUBROUTINE h5dread_integer_7(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) , TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1,1,1,1,1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_integer_7
+
+  SUBROUTINE h5dread_char_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id         ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id   ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(INOUT) :: buf     ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr             ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    CALL h5dread_char_scalar_fix(dset_id, mem_type_id, buf, LEN(buf), dims, hdferr, &
+         mem_space_id, file_space_id, xfer_prp)
+
+  END SUBROUTINE h5dread_char_scalar
+
+  SUBROUTINE h5dread_char_scalar_fix(dset_id, mem_type_id, buf, buf_len, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(IN)  :: buf_len
+    CHARACTER(LEN=buf_len), INTENT(INOUT), TARGET :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    f_ptr = C_LOC(buf(1:1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_char_scalar_fix
+
+  SUBROUTINE h5dread_char_1(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    f_ptr = C_LOC(buf(1)(1:1))
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_char_1
+
+  SUBROUTINE h5dread_char_2(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    f_ptr = C_LOC(buf(1,1)(1:1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_char_2
+
+  SUBROUTINE h5dread_char_3(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    f_ptr = C_LOC(buf(1,1,1)(1:1))
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_char_3
+
+  SUBROUTINE h5dread_char_4(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    f_ptr = C_LOC(buf(1,1,1,1)(1:1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_char_4
+
+  SUBROUTINE h5dread_char_5(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    f_ptr = C_LOC(buf(1,1,1,1,1)(1:1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_char_5
+
+  SUBROUTINE h5dread_char_6(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    f_ptr = C_LOC(buf(1,1,1,1,1,1)(1:1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_char_6
+
+  SUBROUTINE h5dread_char_7(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    f_ptr = C_LOC(buf(1,1,1,1,1,1,1)(1:1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_char_7
+
+  SUBROUTINE h5dread_real_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(INOUT) , TARGET :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf)
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_real_scalar
+
+  SUBROUTINE h5dread_real_1(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1)) , TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_real_1
+
+  SUBROUTINE h5dread_real_2(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2)) , TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_real_2
+
+  SUBROUTINE h5dread_real_3(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3)) , TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_real_3
+
+  SUBROUTINE h5dread_real_4(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3), dims(4)) , TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1,1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_real_4
+
+  SUBROUTINE h5dread_real_5(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) , TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1,1,1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_real_5
+
+  SUBROUTINE h5dread_real_6(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) , TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1,1,1,1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_real_6
+
+  SUBROUTINE h5dread_real_7(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) , TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1,1,1,1,1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_real_7
+
+!****s* H5D (F03)/h5dwrite_f_F03
+!
+! NAME		
+!  h5dwrite_f_F03
+!
+! PURPOSE
+!  Writes raw data from a dataset into a buffer. 
+!
+! Inputs:
+!  dset_id	 - Identifier of the dataset to write to.
+!  mem_type_id	 - Identifier of the memory datatype.
+!  buf		 - Buffer with data to be written to the file.
+!  
+! Outputs:
+!  hdferr        - Returns 0 if successful and -1 if fails
+!
+! Optional parameters:
+!  mem_space_id	 - Identifier of the memory dataspace.
+!  file_space_id - Identifier of the dataset's dataspace in the file.
+!  xfer_prp	 - Identifier of a transfer property list for this I/O operation.
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  September 17, 2011
+!
+! Fortran2003 Interface:
+!!  SUBROUTINE h5dwrite_f(dset_id, mem_type_id, buf, hdferr, &
+!!                        mem_space_id, file_space_id, xfer_prp)
+!!    INTEGER(HID_T), INTENT(IN)              :: dset_id
+!!    INTEGER(HID_T), INTENT(IN)              :: mem_type_id
+!!    TYPE(C_PTR)   , INTENT(IN)              :: buf
+!!    INTEGER       , INTENT(OUT)             :: hdferr
+!!    INTEGER(HID_T), INTENT(IN)   , OPTIONAL :: mem_space_id
+!!    INTEGER(HID_T), INTENT(IN)   , OPTIONAL :: file_space_id
+!!    INTEGER(HID_T), INTENT(IN)   , OPTIONAL :: xfer_prp
+!*****
+  SUBROUTINE h5dwrite_ptr(dset_id, mem_type_id, buf, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    TYPE(C_PTR), INTENT(IN) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf)
+
+  END SUBROUTINE h5dwrite_ptr
+!****s* H5D (F03)/h5dread_f_F03
+!
+! NAME		
+!  h5dread_f_F03
+!
+! PURPOSE
+!  Reads raw data from a dataset into a buffer. 
+!
+! Inputs:
+!  dset_id	 - Identifier of the dataset read from.
+!  mem_type_id	 - Identifier of the memory datatype.
+!  
+! Outputs:
+!  buf		 - Buffer to receive data read from file.
+!  hdferr        - Returns 0 if successful and -1 if fails
+!
+! Optional parameters:
+!  mem_space_id	 - Identifier of the memory dataspace.
+!  file_space_id - Identifier of the dataset's dataspace in the file.
+!  xfer_prp	 - Identifier of a transfer property list for this I/O operation.
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  September 17, 2011
+!
+! Fortran2003 Interface:
+!!  SUBROUTINE h5dread_f(dset_id, mem_type_id, buf, hdferr, &
+!!                       mem_space_id, file_space_id, xfer_prp)
+!!    INTEGER(HID_T), INTENT(IN)              :: dset_id
+!!    INTEGER(HID_T), INTENT(IN)              :: mem_type_id
+!!    TYPE(C_PTR)   , INTENT(INOUT)           :: buf
+!!    INTEGER       , INTENT(OUT)             :: hdferr
+!!    INTEGER(HID_T), INTENT(IN)   , OPTIONAL :: mem_space_id
+!!    INTEGER(HID_T), INTENT(IN)   , OPTIONAL :: file_space_id
+!!    INTEGER(HID_T), INTENT(IN)   , OPTIONAL :: xfer_prp
+!*****
+  SUBROUTINE h5dread_ptr(dset_id, mem_type_id, buf, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    TYPE(C_PTR), INTENT(INOUT) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf)
+
+  END SUBROUTINE h5dread_ptr
+
+!
+! NAME		
+!  h5dfill_integer
+!
+! PURPOSE 
+!  Fills dataspace elements with a fill value in a memory buffer.
+!  Only INTEGER, CHARACTER, REAL and DOUBLE PRECISION datatypes
+!  of the fillvalues and buffers are supported. Buffer and fillvalue
+!  are assumed to have the same datatype.
+!  Only one-dimesional buffers are supported.
+!
+! Inputs:
+!		fill_value	- fill value
+!		space_id	- memory space selection identifier
+!		buf		- data buffer iin memory ro apply selection to
+!				- of k-th dimension of the buf array
+! Outputs:
+!		hdferr:		- error code
+!				 	Success:  0
+!				 	Failure: -1
+! AUTHOR
+!  Elena Pourmal
+!  March 12, 2003
+!
+!
+
+  SUBROUTINE h5dfill_integer(fill_value, space_id, buf,  hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER, INTENT(IN), TARGET :: fill_value  ! Fill value
+    INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier
+    INTEGER, INTENT(IN), DIMENSION(*), TARGET :: buf ! Memory buffer to fill in
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+
+    INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier
+    INTEGER(HID_T) :: mem_type_id  ! Buffer dadtype identifier
+
+    TYPE(C_PTR) :: f_ptr_fill_value ! C pointer to fill_value
+    TYPE(C_PTR) :: f_ptr_buf        ! C pointer to buf
+
+    f_ptr_fill_value = C_LOC(fill_value)
+    f_ptr_buf = C_LOC(buf(1))
+
+    fill_type_id = H5T_NATIVE_INTEGER
+    mem_type_id  = H5T_NATIVE_INTEGER
+
+    hdferr = h5dfill_c(f_ptr_fill_value, fill_type_id, space_id, &
+         f_ptr_buf, mem_type_id)
+
+  END SUBROUTINE h5dfill_integer
+
+!
+! NAME
+!  h5dfill_real
+!
+! PURPOSE
+!  Fills dataspace elements with a fill value in a memory buffer.
+!  Only INTEGER, CHARACTER, REAL and DOUBLE PRECISION datatypes
+!  of the fillvalues and buffers are supported. Buffer and fillvalue
+!  are assumed to have the same datatype.
+!  Only one-dimesional buffers are supported.
+!
+! Inputs:
+!		fill_value	- fill value
+!		space_id	- memory space selection identifier
+!		buf		- data buffer iin memory ro apply selection to
+!				- of k-th dimension of the buf array
+! Outputs:
+!		hdferr:		- error code
+!				 	Success:  0
+!				 	Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  March 12, 2003
+!
+  SUBROUTINE h5dfill_real(fill_valuer, space_id, buf,  hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    REAL, INTENT(IN), TARGET :: fill_valuer  ! Fill value
+    INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier
+    REAL, INTENT(IN), DIMENSION(*), TARGET :: buf ! Memory buffer to fill in
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+
+    INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier
+    INTEGER(HID_T) :: mem_type_id !  Buffer dadtype identifier
+
+    TYPE(C_PTR) :: f_ptr_fill_valuer ! C pointer to fill_value
+    TYPE(C_PTR) :: f_ptr_buf ! C pointer to buf
+
+    f_ptr_fill_valuer = C_LOC(fill_valuer)
+    f_ptr_buf = C_LOC(buf(1))
+
+    fill_type_id = H5T_NATIVE_REAL
+    mem_type_id  = H5T_NATIVE_REAL
+
+    hdferr = h5dfill_c(f_ptr_fill_valuer, fill_type_id, space_id, &
+         f_ptr_buf, mem_type_id)
+
+  END SUBROUTINE h5dfill_real
+
+!
+! NAME		
+!  h5dfill_char
+!
+! PURPOSE 
+!  Fills dataspace elements with a fill value in a memory buffer.
+!  Only INTEGER, CHARACTER, REAL and DOUBLE PRECISION datatypes
+!  of the fillvalues and buffers are supported. Buffer and fillvalue
+!  are assumed to have the same datatype.
+!  Only one-dimesional buffers are supported.
+!
+! Inputs:
+!		fill_value	- fill value
+!		space_id	- memory space selection identifier
+!		buf		- data buffer iin memory ro apply selection to
+!				- of k-th dimension of the buf array
+! Outputs:
+!		hdferr:		- error code
+!				 	Success:  0
+!				 	Failure: -1
+! AUTHOR
+!  Elena Pourmal
+!  March 12, 2003
+!
+  SUBROUTINE h5dfill_char(fill_value, space_id, buf,  hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    CHARACTER, INTENT(IN), TARGET :: fill_value  ! Fill value
+    INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier
+    CHARACTER, INTENT(IN), DIMENSION(*), TARGET :: buf ! Memory buffer to fill in
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+
+    INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier
+    INTEGER(HID_T) :: mem_type_id !  Buffer dadtype identifier
+
+    TYPE(C_PTR) :: f_ptr_fill_value ! C pointer to fill_value
+    TYPE(C_PTR) :: f_ptr_buf ! C pointer to buf
+
+    f_ptr_fill_value = C_LOC(fill_value)
+    f_ptr_buf = C_LOC(buf(1))
+
+    hdferr = h5dfill_c(f_ptr_fill_value, fill_type_id, space_id, &
+         f_ptr_buf, mem_type_id)
+
+  END SUBROUTINE h5dfill_char
+!
+!****s* H5D (F03)/h5dvlen_reclaim_f
+! NAME
+!  h5dvlen_reclaim_f
+!
+! PURPOSE 
+!  Reclaims VL datatype memory buffers. 
+!
+! Inputs:
+!
+!  type_id  - Identifier of the datatype. 
+!  space_id - Identifier of the dataspace. 
+!  plist_id - Identifier of the property list used to create the buffer. 
+!  buf      - Pointer to the buffer to be reclaimed. 
+!
+! Outputs:
+!  hdferr   - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+! M. Scot Breitenfeld
+! January 11, 2011
+!
+! Fortran2003 Interface:
+  SUBROUTINE h5dvlen_reclaim_f(type_id, space_id, plist_id, buf, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN)    :: type_id
+    INTEGER(HID_T), INTENT(IN)    :: space_id
+    INTEGER(HID_T), INTENT(IN)    :: plist_id
+    TYPE(C_PTR)   , INTENT(INOUT) :: buf
+    INTEGER       , INTENT(OUT)   :: hdferr
+!*****
+
+    INTERFACE
+       INTEGER FUNCTION h5dvlen_reclaim_c(type_id, space_id, plist_id, buf)
+         USE H5GLOBAL
+         USE, INTRINSIC :: ISO_C_BINDING
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DVLEN_RECLAIM_C'::h5dvlen_reclaim_c
+         !DEC$ENDIF
+         INTEGER(HID_T) :: type_id
+         INTEGER(HID_T) :: space_id
+         INTEGER(HID_T) :: plist_id
+         TYPE(C_PTR), VALUE :: buf
+       END FUNCTION h5dvlen_reclaim_c
+    END INTERFACE
+
+    hdferr = H5Dvlen_reclaim_c(type_id, space_id, plist_id, buf)
+
+  END SUBROUTINE H5Dvlen_reclaim_f
+
+END MODULE H5D_PROVISIONAL
+
+
diff --git a/fortran/src/H5Dff_F90.f90 b/fortran/src/H5Dff_F90.f90
new file mode 100644
index 0000000..3bb0fc0
--- /dev/null
+++ b/fortran/src/H5Dff_F90.f90
@@ -0,0 +1,3002 @@
+!****h* ROBODoc/H5D (F90)
+!
+! NAME
+!
+!  H5D_PROVISIONAL
+!
+! PURPOSE
+!
+!  This file contains Fortran 90 interfaces for H5D functions. It contains
+!  the same functions as H5Dff_F03.f90 but excludes the Fortran 2003 functions
+!  and the interface listings. This file will be compiled instead of H5Dff_F03.f90
+!  if Fortran 2003 functions are not 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 at hdfgroup.org.     *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! NOTES
+!  (1) The maximum rank of an array allowed in Fortran is 7, therefore
+!  we only provide an interface for arrays up to and including rank 7.
+!
+!  (2) Unfortunately we are using a generic interface and one of the factors
+!  used in determining the proper routine to select is that of the array
+!  rank being passed, therefore we can not create just one subroutine for
+!  each array type (integer, real, etc...) of various ranks and then use a
+!  rank 1 array of assumed size in the just one subroutine,
+!  (i.e. integer, dimension(*) :: ... )
+!  (i.e. real   , dimension(*) :: ... ) etc...
+!
+!  (3)
+!                         *** IMPORTANT ***
+!  If you add a new H5D function 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 H5D_PROVISIONAL
+  USE H5GLOBAL
+
+  INTERFACE h5dwrite_f
+
+     MODULE PROCEDURE h5dwrite_reference_obj
+     MODULE PROCEDURE h5dwrite_reference_dsetreg
+     MODULE PROCEDURE h5dwrite_integer_scalar
+     MODULE PROCEDURE h5dwrite_integer_1
+     MODULE PROCEDURE h5dwrite_integer_2
+     MODULE PROCEDURE h5dwrite_integer_3
+     MODULE PROCEDURE h5dwrite_integer_4
+     MODULE PROCEDURE h5dwrite_integer_5
+     MODULE PROCEDURE h5dwrite_integer_6
+     MODULE PROCEDURE h5dwrite_integer_7
+     MODULE PROCEDURE h5dwrite_char_scalar
+     MODULE PROCEDURE h5dwrite_char_1
+     MODULE PROCEDURE h5dwrite_char_2
+     MODULE PROCEDURE h5dwrite_char_3
+     MODULE PROCEDURE h5dwrite_char_4
+     MODULE PROCEDURE h5dwrite_char_5
+     MODULE PROCEDURE h5dwrite_char_6
+     MODULE PROCEDURE h5dwrite_char_7
+     MODULE PROCEDURE h5dwrite_real_scalar
+     MODULE PROCEDURE h5dwrite_real_1
+     MODULE PROCEDURE h5dwrite_real_2
+     MODULE PROCEDURE h5dwrite_real_3
+     MODULE PROCEDURE h5dwrite_real_4
+     MODULE PROCEDURE h5dwrite_real_5
+     MODULE PROCEDURE h5dwrite_real_6
+     MODULE PROCEDURE h5dwrite_real_7
+
+  END INTERFACE
+
+  INTERFACE h5dread_f
+
+     MODULE PROCEDURE h5dread_reference_obj
+     MODULE PROCEDURE h5dread_reference_dsetreg
+     MODULE PROCEDURE h5dread_integer_scalar
+     MODULE PROCEDURE h5dread_integer_1
+     MODULE PROCEDURE h5dread_integer_2
+     MODULE PROCEDURE h5dread_integer_3
+     MODULE PROCEDURE h5dread_integer_4
+     MODULE PROCEDURE h5dread_integer_5
+     MODULE PROCEDURE h5dread_integer_6
+     MODULE PROCEDURE h5dread_integer_7
+     MODULE PROCEDURE h5dread_char_scalar
+     MODULE PROCEDURE h5dread_char_1
+     MODULE PROCEDURE h5dread_char_2
+     MODULE PROCEDURE h5dread_char_3
+     MODULE PROCEDURE h5dread_char_4
+     MODULE PROCEDURE h5dread_char_5
+     MODULE PROCEDURE h5dread_char_6
+     MODULE PROCEDURE h5dread_char_7
+     MODULE PROCEDURE h5dread_real_scalar
+     MODULE PROCEDURE h5dread_real_1
+     MODULE PROCEDURE h5dread_real_2
+     MODULE PROCEDURE h5dread_real_3
+     MODULE PROCEDURE h5dread_real_4
+     MODULE PROCEDURE h5dread_real_5
+     MODULE PROCEDURE h5dread_real_6
+     MODULE PROCEDURE h5dread_real_7
+  END INTERFACE
+
+  INTERFACE h5dfill_f
+     MODULE PROCEDURE h5dfill_integer
+     MODULE PROCEDURE h5dfill_real
+     MODULE PROCEDURE h5dfill_char
+  END INTERFACE
+
+CONTAINS
+
+!****s* H5D/h5dread_f
+!
+! NAME
+!  h5dread_f
+!
+! PURPOSE
+!  Reads raw data from the specified dataset into buf,
+!  converting from file datatype and dataspace to memory
+!  datatype and dataspace.
+!
+! INPUTS
+!  dset_id 	 - dataset identifier
+!  mem_type_id 	 - memory type identifier
+!  dims 	 - 1-dim array of size 7; dims(k) has the size
+!   	           of k-th dimension of the buf array
+! OUTPUTS
+!  buf 	   - buffer to read data in
+!  hdferr: - error code
+!             Success:  0
+!             Failure: -1
+!
+! OPTIONAL PARAMETERS
+!  mem_space_id  - memory dataspace identifier
+!  file_space_id - file dataspace identifier
+!  xfer_prp 	 - trasfer property list identifier
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
+!
+!  dims parameter was added to make code portable;
+!  n parameter was replaced with dims parameter in
+!  the h5dwrite_reference_obj and h5dwrite_reference_dsetreg
+!  functions.  April 2, 2001
+!
+! NOTES
+!  This function is overloaded to read INTEGER,
+!  REAL, DOUBLE PRECISION and CHARACTER buffers
+!  up to 7 dimensions, and one dimensional buffers
+!  of the TYPE(hobj_ref_t_f) and TYPE(hdset_reg_ref_t_f) types.
+!*****
+  SUBROUTINE h5dread_reference_obj(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    TYPE(hobj_ref_t_f), INTENT(INOUT) , &
+         DIMENSION(dims(1)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    INTEGER(HADDR_T), ALLOCATABLE, DIMENSION(:) :: ref_buf
+    INTEGER :: j
+
+    INTERFACE
+       INTEGER FUNCTION h5dread_ref_obj_c(dset_id, mem_type_id,&
+            mem_space_id_default, &
+            file_space_id_default, xfer_prp_default, ref_buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REF_OBJ_C'::h5dread_ref_obj_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER(HADDR_T), DIMENSION(*) :: ref_buf
+       END FUNCTION h5dread_ref_obj_c
+    END INTERFACE
+
+    ALLOCATE(ref_buf(dims(1)), stat=hdferr)
+    IF (hdferr .NE. 0) THEN
+       hdferr = -1
+       RETURN
+    ENDIF
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_ref_obj_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, ref_buf, dims)
+    DO j = 1, dims(1)
+       buf(j)%ref = ref_buf(j)
+    ENDDO
+    DEALLOCATE(ref_buf)
+  END SUBROUTINE h5dread_reference_obj
+
+  SUBROUTINE h5dread_reference_dsetreg(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    TYPE(hdset_reg_ref_t_f), INTENT(INOUT), &
+         DIMENSION(dims(1)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    INTEGER, ALLOCATABLE, DIMENSION(:) :: ref_buf
+    INTEGER :: i,j
+
+    INTERFACE
+       INTEGER FUNCTION h5dread_ref_reg_c(dset_id, mem_type_id,&
+            mem_space_id_default, &
+            file_space_id_default, xfer_prp_default, ref_buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REF_REG_C'::h5dread_ref_reg_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, DIMENSION(*) :: ref_buf
+       END FUNCTION h5dread_ref_reg_c
+    END INTERFACE
+
+    ALLOCATE(ref_buf(REF_REG_BUF_LEN*dims(1)), stat=hdferr)
+    IF (hdferr .NE. 0) THEN
+       hdferr = -1
+       RETURN
+    ENDIF
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_ref_reg_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, ref_buf, dims)
+
+    DO j = 1, dims(1)
+       DO i = 1, REF_REG_BUF_LEN
+          buf(j)%ref(i) = ref_buf(REF_REG_BUF_LEN*(j-1) + i)
+       ENDDO
+    ENDDO
+    DEALLOCATE(ref_buf)
+  END SUBROUTINE h5dread_reference_dsetreg
+
+  SUBROUTINE h5dread_integer_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(INOUT) :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dread_integer_s_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_INTEGER_S_C'::h5dread_integer_s_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, INTENT(OUT) :: buf
+       END FUNCTION h5dread_integer_s_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_integer_s_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_integer_scalar
+
+  SUBROUTINE h5dread_integer_1(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(INOUT), DIMENSION(dims(1)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dread_integer_1_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_INTEGER_1_C'::h5dread_integer_1_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, INTENT(OUT), DIMENSION(dims(1)) :: buf
+       END FUNCTION h5dread_integer_1_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_integer_1_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_integer_1
+
+  SUBROUTINE h5dread_integer_2(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(INOUT), DIMENSION(dims(1),dims(2)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dread_integer_2_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_INTEGER_2_C'::h5dread_integer_2_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, INTENT(OUT), DIMENSION(dims(1),dims(2)) :: buf
+       END FUNCTION h5dread_integer_2_c
+    END INTERFACE
+
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_integer_2_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims)
+
+  END SUBROUTINE h5dread_integer_2
+
+  SUBROUTINE h5dread_integer_3(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    !
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5dread_integer_3_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_INTEGER_3_C'::h5dread_integer_3_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, INTENT(OUT), DIMENSION(dims(1),dims(2),dims(3)) :: buf
+       END FUNCTION h5dread_integer_3_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_integer_3_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims)
+
+  END SUBROUTINE h5dread_integer_3
+
+  SUBROUTINE h5dread_integer_4(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(INOUT), DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    !
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5dread_integer_4_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_INTEGER_4_C'::h5dread_integer_4_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, INTENT(OUT), DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+       END FUNCTION h5dread_integer_4_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_integer_4_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims)
+
+  END SUBROUTINE h5dread_integer_4
+
+  SUBROUTINE h5dread_integer_5(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(INOUT), DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    !
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5dread_integer_5_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_INTEGER_5_C'::h5dread_integer_5_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+       END FUNCTION h5dread_integer_5_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_integer_5_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims)
+
+  END SUBROUTINE h5dread_integer_5
+
+  SUBROUTINE h5dread_integer_6(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+
+    INTERFACE
+       INTEGER FUNCTION h5dread_integer_6_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_INTEGER_6_C'::h5dread_integer_6_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+       END FUNCTION h5dread_integer_6_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_integer_6_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims)
+
+  END SUBROUTINE h5dread_integer_6
+
+  SUBROUTINE h5dread_integer_7(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dread_integer_7_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_INTEGER_7_C'::h5dread_integer_7_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+       END FUNCTION h5dread_integer_7_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_integer_7_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims)
+
+  END SUBROUTINE h5dread_integer_7
+
+  SUBROUTINE h5dread_char_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(INOUT) :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dreadc_s_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREADC_S_C'::h5dreadc_s_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         CHARACTER(LEN=*), INTENT(OUT) :: buf
+       END FUNCTION h5dreadc_s_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dreadc_s_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_char_scalar
+
+  SUBROUTINE h5dread_char_1(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dreadc_1_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREADC_1_C'::h5dreadc_1_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         CHARACTER(LEN=*), INTENT(INOUT), &
+              DIMENSION(dims(1)) :: buf
+       END FUNCTION h5dreadc_1_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dreadc_1_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_char_1
+
+  SUBROUTINE h5dread_char_2(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+
+    INTERFACE
+       INTEGER FUNCTION h5dreadc_2_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREADC_2_C'::h5dreadc_2_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         CHARACTER(LEN=*), INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2)) :: buf
+       END FUNCTION h5dreadc_2_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dreadc_2_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_char_2
+
+  SUBROUTINE h5dread_char_3(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dreadc_3_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREADC_3_C'::h5dreadc_3_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         CHARACTER(LEN=*), INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3)) :: buf
+       END FUNCTION h5dreadc_3_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dreadc_3_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_char_3
+
+  SUBROUTINE h5dread_char_4(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dreadc_4_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREADC_4_C'::h5dreadc_4_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         CHARACTER(LEN=*), INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+       END FUNCTION h5dreadc_4_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dreadc_4_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_char_4
+
+  SUBROUTINE h5dread_char_5(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dreadc_5_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREADC_5_C'::h5dreadc_5_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         CHARACTER(LEN=*), INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+       END FUNCTION h5dreadc_5_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dreadc_5_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_char_5
+
+  SUBROUTINE h5dread_char_6(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dreadc_6_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREADC_6_C'::h5dreadc_6_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         CHARACTER(LEN=*), INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+       END FUNCTION h5dreadc_6_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dreadc_6_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_char_6
+
+  SUBROUTINE h5dread_char_7(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dreadc_7_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREADC_7_C'::h5dreadc_7_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         CHARACTER(LEN=*), INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+       END FUNCTION h5dreadc_7_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dreadc_7_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_char_7
+
+  SUBROUTINE h5dread_real_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(INOUT) :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dread_real_s_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REAL_S_C'::h5dread_real_s_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         REAL, INTENT(OUT) :: buf
+       END FUNCTION h5dread_real_s_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_real_s_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_real_scalar
+
+  SUBROUTINE h5dread_real_1(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    !            INTEGER, EXTERNAL :: h5dread_real_1_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5dread_real_1_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REAL_1_C'::h5dread_real_1_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         REAL, INTENT(INOUT), &
+              DIMENSION(dims(1)) :: buf
+       END FUNCTION h5dread_real_1_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_real_1_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_real_1
+
+  SUBROUTINE h5dread_real_2(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dread_real_2_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REAL_2_C'::h5dread_real_2_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         REAL, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2)) :: buf
+       END FUNCTION h5dread_real_2_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_real_2_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_real_2
+
+  SUBROUTINE h5dread_real_3(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dread_real_3_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REAL_3_C'::h5dread_real_3_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         REAL, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3)) :: buf
+       END FUNCTION h5dread_real_3_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_real_3_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_real_3
+
+  SUBROUTINE h5dread_real_4(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3), dims(4)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dread_real_4_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REAL_4_C'::h5dread_real_4_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         REAL, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3), dims(4)) :: buf
+       END FUNCTION h5dread_real_4_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_real_4_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_real_4
+
+  SUBROUTINE h5dread_real_5(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dread_real_5_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REAL_5_C'::h5dread_real_5_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         REAL, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+       END FUNCTION h5dread_real_5_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_real_5_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_real_5
+
+  SUBROUTINE h5dread_real_6(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dread_real_6_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REAL_6_C'::h5dread_real_6_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         REAL, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+       END FUNCTION h5dread_real_6_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_real_6_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_real_6
+
+  SUBROUTINE h5dread_real_7(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dread_real_7_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REAL_7_C'::h5dread_real_7_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         REAL, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+       END FUNCTION h5dread_real_7_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_real_7_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_real_7
+
+  SUBROUTINE h5dwrite_reference_obj(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: dims ! size of the bufffer buf
+    TYPE(hobj_ref_t_f), DIMENSION(dims(1)), INTENT(IN) :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    INTEGER(HADDR_T), ALLOCATABLE, DIMENSION(:) :: ref_buf
+    INTEGER :: j
+
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_ref_obj_c(dset_id, mem_type_id,&
+            mem_space_id_default, &
+            file_space_id_default, xfer_prp_default, ref_buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REF_OBJ_C'::h5dwrite_ref_obj_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HADDR_T), DIMENSION(*) :: ref_buf
+         INTEGER(HSIZE_T), DIMENSION(*) :: dims
+       END FUNCTION h5dwrite_ref_obj_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    ALLOCATE(ref_buf(dims(1)), stat=hdferr)
+    IF (hdferr .NE. 0 ) THEN
+       hdferr = -1
+       RETURN
+    ELSE
+       DO j = 1, dims(1)
+          ref_buf(j) = buf(j)%ref
+       ENDDO
+    ENDIF
+    hdferr = h5dwrite_ref_obj_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, ref_buf, dims(1))
+    DEALLOCATE(ref_buf)
+
+  END SUBROUTINE h5dwrite_reference_obj
+
+  SUBROUTINE h5dwrite_reference_dsetreg(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: dims ! size of the bufffer buf
+    TYPE(hdset_reg_ref_t_f), DIMENSION(dims(1)), INTENT(IN) :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    INTEGER, ALLOCATABLE, DIMENSION(:) :: ref_buf
+    INTEGER :: i,j
+
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_ref_reg_c(dset_id, mem_type_id,&
+            mem_space_id_default, &
+            file_space_id_default, xfer_prp_default, ref_buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REF_REG_C'::h5dwrite_ref_reg_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER, DIMENSION(*) :: ref_buf
+         INTEGER(HSIZE_T), DIMENSION(*) ::  dims
+       END FUNCTION h5dwrite_ref_reg_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    ALLOCATE(ref_buf(REF_REG_BUF_LEN*dims(1)), stat=hdferr)
+    IF (hdferr .NE. 0 ) THEN
+       hdferr = -1
+       RETURN
+    ELSE
+       DO j = 1, dims(1)
+          DO i = 1, REF_REG_BUF_LEN
+             ref_buf(REF_REG_BUF_LEN*(j-1) + i) = buf(j)%ref(i)
+          ENDDO
+       ENDDO
+    ENDIF
+    hdferr = h5dwrite_ref_reg_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, ref_buf, dims)
+    DEALLOCATE(ref_buf)
+
+  END SUBROUTINE h5dwrite_reference_dsetreg
+
+  SUBROUTINE h5dwrite_integer_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER, INTENT(IN) :: buf ! Data buffer
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_integer_s_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_INTEGER_S_C'::h5dwrite_integer_s_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, INTENT(IN) :: buf
+       END FUNCTION h5dwrite_integer_s_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwrite_integer_s_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dwrite_integer_scalar
+
+  SUBROUTINE h5dwrite_integer_1(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_integer_1_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_INTEGER_1_C'::h5dwrite_integer_1_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, INTENT(IN), &
+              DIMENSION(dims(1)) :: buf
+       END FUNCTION h5dwrite_integer_1_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwrite_integer_1_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dwrite_integer_1
+
+  SUBROUTINE h5dwrite_integer_2(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2)) :: buf   ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_integer_2_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_INTEGER_2_C'::h5dwrite_integer_2_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, INTENT(IN), &
+              DIMENSION(dims(1),dims(2)) :: buf
+       END FUNCTION h5dwrite_integer_2_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+    hdferr = h5dwrite_integer_2_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims)
+
+  END SUBROUTINE h5dwrite_integer_2
+
+  SUBROUTINE h5dwrite_integer_3(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_integer_3_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_INTEGER_3_C'::h5dwrite_integer_3_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3)) :: buf
+       END FUNCTION h5dwrite_integer_3_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwrite_integer_3_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims)
+
+  END SUBROUTINE h5dwrite_integer_3
+
+  SUBROUTINE h5dwrite_integer_4(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_integer_4_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_INTEGER_4_C'::h5dwrite_integer_4_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+       END FUNCTION h5dwrite_integer_4_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwrite_integer_4_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims)
+
+  END SUBROUTINE h5dwrite_integer_4
+
+  SUBROUTINE h5dwrite_integer_5(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_integer_5_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_INTEGER_5_C'::h5dwrite_integer_5_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+       END FUNCTION h5dwrite_integer_5_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwrite_integer_5_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims)
+
+  END SUBROUTINE h5dwrite_integer_5
+
+  SUBROUTINE h5dwrite_integer_6(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_integer_6_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_INTEGER_6_C'::h5dwrite_integer_6_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+       END FUNCTION h5dwrite_integer_6_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwrite_integer_6_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims)
+
+  END SUBROUTINE h5dwrite_integer_6
+
+  SUBROUTINE h5dwrite_integer_7(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_integer_7_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_INTEGER_7_C'::h5dwrite_integer_7_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+       END FUNCTION h5dwrite_integer_7_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwrite_integer_7_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims)
+
+  END SUBROUTINE h5dwrite_integer_7
+
+
+  SUBROUTINE h5dwrite_char_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(IN) :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwritec_s_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITEC_S_C'::h5dwritec_s_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         CHARACTER(LEN=*), INTENT(IN) :: buf
+       END FUNCTION h5dwritec_s_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwritec_s_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dwrite_char_scalar
+
+  SUBROUTINE h5dwrite_char_1(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwritec_1_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITEC_1_C'::h5dwritec_1_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         CHARACTER(LEN=*), INTENT(IN), &
+              DIMENSION(dims(1)) :: buf
+       END FUNCTION h5dwritec_1_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwritec_1_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dwrite_char_1
+
+  SUBROUTINE h5dwrite_char_2(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwritec_2_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITEC_2_C'::h5dwritec_2_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         CHARACTER(LEN=*), INTENT(IN), &
+              DIMENSION(dims(1),dims(2)) :: buf
+       END FUNCTION h5dwritec_2_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwritec_2_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dwrite_char_2
+
+  SUBROUTINE h5dwrite_char_3(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwritec_3_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITEC_3_C'::h5dwritec_3_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         CHARACTER(LEN=*), INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3)) :: buf
+       END FUNCTION h5dwritec_3_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwritec_3_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dwrite_char_3
+
+  SUBROUTINE h5dwrite_char_4(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwritec_4_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITEC_4_C'::h5dwritec_4_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         CHARACTER(LEN=*), INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+       END FUNCTION h5dwritec_4_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwritec_4_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dwrite_char_4
+
+  SUBROUTINE h5dwrite_char_5(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwritec_5_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITEC_5_C'::h5dwritec_5_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         CHARACTER(LEN=*), INTENT(IN), &
+              DIMENSION(d