summaryrefslogtreecommitdiffstats
path: root/tools/h5dump
diff options
context:
space:
mode:
authorAlbert Cheng <acheng@hdfgroup.org>2008-05-15 05:12:00 (GMT)
committerAlbert Cheng <acheng@hdfgroup.org>2008-05-15 05:12:00 (GMT)
commit7b7f10a4448122cc7d2996f748f47df7436f9605 (patch)
tree352d4bbf9b5036b9ac1833908ffd07dba3e1a456 /tools/h5dump
parentc57a9ec023e85e9ee4a712fbb6ffcbdeb801019d (diff)
downloadhdf5-7b7f10a4448122cc7d2996f748f47df7436f9605.zip
hdf5-7b7f10a4448122cc7d2996f748f47df7436f9605.tar.gz
hdf5-7b7f10a4448122cc7d2996f748f47df7436f9605.tar.bz2
[svn-r15003] Purpose:
Improvement. Description: src/libhdf5.settings was the initial configure summary and is installed. Then configure is changed to dump a summary of the configure settings to the output and also append it to src/libhdf5.settings. That created two different output formats and duplicated information. This is the initial attempt to clean up this confusion and unify the output format. It is decided to use the src/libhdf5.settings template as the unified means. This requires more macros symbols be defined. The following symbols are all related to generating the src/libhdf5.settings file. 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(FC) HDF_FORTRAN=no AC_SUBST(HDF_CXX) HDF_CXX=no AC_SUBST(CXX) HDF_CXX=no AC_SUBST(HDF5_HL) HDF5_HL=yes AC_SUBST(GPFS) GPFS=no AC_SUBST(LINUX_LFS) LINUX_LFS=no AC_SUBST(INSTRUMENT) INSTRUMENT=no AC_SUBST(CODESTACK) CODESTACK=no AC_SUBST(HAVE_DMALLOC) HAVE_DMALLOC=no AC_SUBST(DIRECT_VFD) DIRECT_VFD=no AC_SUBST(THREADSAFE) THREADSAFE=no AC_SUBST(STATIC_SHARED) AC_SUBST(enable_shared) AC_SUBST(enable_static) AC_SUBST(UNAME_INFO) UNAME_INFO=`uname -a` The src/libhdf5.settings.in has CONDITIONAL's added to it too. The untrue conditions turned into a "#" and these lines are cleaned by the post processing script. Platform tested: h5committest on kagiso, smirom and linew.
Diffstat (limited to 'tools/h5dump')
-rw-r--r--tools/h5dump/Makefile.in15
1 files changed, 15 insertions, 0 deletions
diff --git a/tools/h5dump/Makefile.in b/tools/h5dump/Makefile.in
index 661e07e..f7e0982 100644
--- a/tools/h5dump/Makefile.in
+++ b/tools/h5dump/Makefile.in
@@ -118,6 +118,7 @@ CC_VERSION = @CC_VERSION@
# but which shouldn't be exported to h5cc for building other programs.
CFLAGS = @CFLAGS@ @H5_CFLAGS@
CLEARFILEBUF = @CLEARFILEBUF@
+CODESTACK = @CODESTACK@
CONFIG_DATE = @CONFIG_DATE@
CONFIG_MODE = @CONFIG_MODE@
CONFIG_USER = @CONFIG_USER@
@@ -133,6 +134,7 @@ DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@
+DIRECT_VFD = @DIRECT_VFD@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
DYNAMIC_DIRS = @DYNAMIC_DIRS@
@@ -141,6 +143,7 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
+EXTERNAL_FILTERS = @EXTERNAL_FILTERS@
# Make sure that these variables are exported to the Makefiles
F9XMODEXT = @F9XMODEXT@
@@ -153,6 +156,7 @@ FCLIBS = @FCLIBS@
FGREP = @FGREP@
FILTERS = @FILTERS@
FSEARCH_DIRS = @FSEARCH_DIRS@
+GPFS = @GPFS@
GREP = @GREP@
H5_CFLAGS = @H5_CFLAGS@
H5_CPPFLAGS = @H5_CPPFLAGS@
@@ -161,7 +165,11 @@ H5_FCFLAGS = @H5_FCFLAGS@
H5_LONE_COLON = @H5_LONE_COLON@
H5_VERSION = @H5_VERSION@
HADDR_T = @HADDR_T@
+HAVE_DMALLOC = @HAVE_DMALLOC@
+HDF5_HL = @HDF5_HL@
HDF5_INTERFACES = @HDF5_INTERFACES@
+HDF_CXX = @HDF_CXX@
+HDF_FORTRAN = @HDF_FORTRAN@
HID_T = @HID_T@
HL = @HL@
HL_FOR = @HL_FOR@
@@ -173,12 +181,14 @@ INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTRUMENT = @INSTRUMENT@
INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
+LINUX_LFS = @LINUX_LFS@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
LT_STATIC_EXEC = @LT_STATIC_EXEC@
@@ -218,13 +228,16 @@ SET_MAKE = @SET_MAKE@
# configure's automatic SHELL detection may not work on the build machine.
SHELL = /bin/sh
SIZE_T = @SIZE_T@
+STATIC_EXEC = @STATIC_EXEC@
STATIC_SHARED = @STATIC_SHARED@
STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
STRIP = @STRIP@
TESTPARALLEL = @TESTPARALLEL@
+THREADSAFE = @THREADSAFE@
TIME = @TIME@
TR = @TR@
TRACE_API = @TRACE_API@
+UNAME_INFO = @UNAME_INFO@
USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
USE_FILTER_FLETCHER32 = @USE_FILTER_FLETCHER32@
USE_FILTER_NBIT = @USE_FILTER_NBIT@
@@ -257,6 +270,8 @@ datadir = @datadir@
datarootdir = @datarootdir@
docdir = $(exec_prefix)/doc
dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
ef='#n329'>329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643
!> @defgroup FH5R Fortran References (H5R) Interface
!!
!! @see H5R, C-API
!!
!! @see @ref H5R_UG, User Guide
!!

!> @ingroup FH5R
!!
!! @brief This module contains Fortran interfaces for H5R functions.
!
! NAME
!  MODULE H5R
!
! FILE
!  fortran/src/H5Rff.F90
!
! PURPOSE
!  This file contains Fortran interfaces for H5R functions.
!
! COPYRIGHT
! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
!   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 COPYING file, which can be found at the root of the source code       *
!   distribution tree, or in https://www.hdfgroup.org/licenses.               *
!   If you do not have access to either file, you may request a copy from     *
!   help@hdfgroup.org.                                                        *
! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
!
! NOTES
!
!       _____ __  __ _____   ____  _____ _______       _   _ _______
!      |_   _|  \/  |  __ \ / __ \|  __ \__   __|/\   | \ | |__   __|
! ****   | | | \  / | |__) | |  | | |__) | | |  /  \  |  \| |  | |    ****
! ****   | | | |\/| |  ___/| |  | |  _  /  | | / /\ \ | . ` |  | |    ****
! ****  _| |_| |  | | |    | |__| | | \ \  | |/ ____ \| |\  |  | |    ****
!      |_____|_|  |_|_|     \____/|_|  \_\ |_/_/    \_\_| \_|  |_|
!
!  If you add a new H5R function you must add the function name to the
!  Windows dll file 'hdf5_fortrandll.def.in' in the fortran/src directory.
!  This is needed for Windows based operating systems.
!

MODULE H5R

  USE H5GLOBAL
  IMPLICIT NONE

  ! If you change the value of these parameters, do not forget to change corresponding
  ! values in the H5f90.h file.
  !        INTEGER, PARAMETER :: REF_OBJ_BUF_LEN = 2
  !        INTEGER, PARAMETER :: REF_REG_BUF_LEN = 3
  !
  !        TYPE hobj_ref_t_f
  !             INTEGER ref(REF_OBJ_BUF_LEN)
  !        END TYPE
  !
  !        TYPE hdset_reg_ref_t_f
  !             INTEGER ref(REF_REG_BUF_LEN)
  !        END TYPE
  !

  PRIVATE h5rget_object_type_obj_f
  PRIVATE h5rget_region_region_f, h5rget_region_ptr_f
  PRIVATE h5rcreate_object_f, h5rcreate_region_f, h5rcreate_ptr_f
  PRIVATE h5rdereference_object_f, h5rdereference_region_f, h5rdereference_ptr_f
  PRIVATE h5rget_name_object_f, h5rget_name_region_f, h5rget_name_ptr_f

!> @brief hdset_reg_ref_t_f03 C compatible reference
  TYPE :: hdset_reg_ref_t_f03
     INTEGER(C_SIGNED_CHAR), DIMENSION(1:H5R_DSET_REG_REF_BUF_SIZE_F) :: ref
  END TYPE hdset_reg_ref_t_f03

  INTERFACE h5rget_object_type_f
     MODULE PROCEDURE h5rget_object_type_obj_f
  END INTERFACE

#ifndef H5_DOXYGEN

  INTERFACE h5rget_region_f
     MODULE PROCEDURE h5rget_region_ptr_f    ! F2003
     MODULE PROCEDURE h5rget_region_region_f ! obsolete
  END INTERFACE

  INTERFACE h5rcreate_f
     MODULE PROCEDURE h5rcreate_ptr_f    ! F2003
     MODULE PROCEDURE h5rcreate_object_f ! obsolete
     MODULE PROCEDURE h5rcreate_region_f ! obsolete
  END INTERFACE

  INTERFACE h5rdereference_f
     MODULE PROCEDURE h5rdereference_ptr_f    ! F2003
     MODULE PROCEDURE h5rdereference_object_f ! obsolete
     MODULE PROCEDURE h5rdereference_region_f ! obsolete
  END INTERFACE

  INTERFACE h5rget_name_f
     MODULE PROCEDURE h5rget_name_ptr_f    ! F2003
     MODULE PROCEDURE h5rget_name_object_f ! obsolete
     MODULE PROCEDURE h5rget_name_region_f ! obsolete
  END INTERFACE

  INTERFACE
     INTEGER FUNCTION h5rget_name_ptr_c(loc_id, ref_type, ref, name, name_len, size_default) &
          BIND(C, NAME='h5rget_name_ptr_c')
       IMPORT :: c_char, c_ptr
       IMPORT :: HID_T, SIZE_T
       IMPLICIT NONE
       INTEGER(HID_T), INTENT(IN) :: loc_id
       INTEGER, INTENT(IN) :: ref_type
       TYPE(C_PTR), INTENT(IN), VALUE :: ref
       CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: name
       INTEGER(SIZE_T) :: name_len
       INTEGER(SIZE_T) :: size_default
     END FUNCTION h5rget_name_ptr_c
  END INTERFACE

  INTERFACE
     INTEGER FUNCTION h5rdereference_ptr_c(obj_id, ref_type, ref, ref_obj_id) &
          BIND(C, NAME='h5rdereference_ptr_c')
       IMPORT :: c_ptr
       IMPORT :: HID_T
       IMPLICIT NONE
       INTEGER(HID_T), INTENT(IN) :: obj_id
       INTEGER, INTENT(IN) :: ref_type
       TYPE(C_PTR), INTENT(IN), VALUE :: ref
       INTEGER(HID_T), INTENT(OUT) :: ref_obj_id
     END FUNCTION h5rdereference_ptr_c
  END INTERFACE

  INTERFACE
     INTEGER FUNCTION h5rcreate_ptr_c(ref, loc_id, name, namelen, ref_type, space_id) &
          BIND(C, NAME='h5rcreate_ptr_c')
       IMPORT :: c_ptr, c_char
       IMPORT :: HID_T
       IMPLICIT NONE
       TYPE(C_PTR), VALUE :: ref
       INTEGER(HID_T), INTENT(IN) :: loc_id
       CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: name
       INTEGER :: namelen
       INTEGER, INTENT(IN) :: ref_type
       INTEGER(HID_T), INTENT(IN) :: space_id
     END FUNCTION h5rcreate_ptr_c
  END INTERFACE

  INTERFACE
     INTEGER FUNCTION h5rget_region_ptr_c(dset_id, ref, space_id) &
          BIND(C, NAME='h5rget_region_ptr_c')
       IMPORT :: c_ptr
       IMPORT :: HID_T
       IMPLICIT NONE
       INTEGER(HID_T), INTENT(IN) :: dset_id
       TYPE(C_PTR), VALUE :: ref
       INTEGER(HID_T), INTENT(OUT) :: space_id
     END FUNCTION h5rget_region_ptr_c
  END INTERFACE
#endif

CONTAINS

!>
!! \ingroup FH5R
!!
!! \brief Retrieves the type of object that an object reference points to.
!!
!! \attention  \fortran_obsolete
!!
!! \param dset_id  Identifier of the dataset containing reference to the objects.
!! \param ref      Reference to open.
!! \param obj_type Object_type, possible values:
!!                 \li H5G_UNKNOWN_F
!!                 \li H5G_GROUP_F
!!                 \li H5G_DATASET_F
!!                 \li H5G_TYPE_F
!! \param hdferr   \fortran_error
!!
#ifdef H5_DOXYGEN
  SUBROUTINE h5rget_object_type_f(&
#else
  SUBROUTINE h5rget_object_type_obj_f(&
#endif
    dset_id, ref, obj_type, hdferr)
    IMPLICIT NONE
    INTEGER(HID_T), INTENT(IN) :: dset_id
    TYPE(hobj_ref_t_f), INTENT(IN) :: ref
    INTEGER, INTENT(OUT) :: obj_type
    INTEGER, INTENT(OUT) :: hdferr
    INTEGER(HADDR_T) :: ref_f          ! Local buffer to pass reference

    INTERFACE
       INTEGER FUNCTION h5rget_object_type_obj_c(dset_id, ref_f, obj_type) BIND(C, NAME='h5rget_object_type_obj_c')
         IMPORT :: HID_T, HADDR_T
         IMPLICIT NONE
         INTEGER(HID_T), INTENT(IN) :: dset_id
         INTEGER(HADDR_T) :: ref_f
         INTEGER, INTENT(OUT) :: obj_type
       END FUNCTION h5rget_object_type_obj_c
    END INTERFACE

    ref_f = ref%ref
    hdferr = h5rget_object_type_obj_c(dset_id, ref_f, obj_type )

#ifdef H5_DOXYGEN
  END SUBROUTINE h5rget_object_type_f
#else
  END SUBROUTINE h5rget_object_type_obj_f
#endif

!>
!! \ingroup FH5R
!!
!! \brief Retrieves a dataspace with the specified region selected.
!!
!! \attention  \fortran_obsolete
!!
!! \param dset_id  Identifier of the dataset containing reference to the regions.
!! \param ref      Reference to open.
!! \param space_id Dataspace identifier.
!! \param hdferr   \fortran_error
!!
  SUBROUTINE h5rget_region_region_f(dset_id, ref, space_id, hdferr)
    IMPLICIT NONE
    INTEGER(HID_T), INTENT(IN) :: dset_id
    TYPE(hdset_reg_ref_t_f), INTENT(IN) :: ref
    INTEGER(HID_T), INTENT(OUT) :: space_id
    INTEGER, INTENT(OUT) :: hdferr

    INTEGER :: ref_f(REF_REG_BUF_LEN)          ! Local buffer to pass reference

    INTERFACE
       INTEGER FUNCTION h5rget_region_region_c(dset_id, ref_f, space_id) BIND(C, NAME='h5rget_region_region_c')
         IMPORT :: HID_T, REF_REG_BUF_LEN
         IMPLICIT NONE
         INTEGER(HID_T), INTENT(IN) :: dset_id
         INTEGER :: ref_f(REF_REG_BUF_LEN)
         INTEGER(HID_T), INTENT(OUT) :: space_id
       END FUNCTION h5rget_region_region_c
    END INTERFACE

    ref_f = ref%ref
    hdferr = h5rget_region_region_c(dset_id, ref_f, space_id )

  END SUBROUTINE h5rget_region_region_f

!>
!! \ingroup FH5R
!!
!! \brief Retrieves a dataspace with the specified region selected using pointer.
!!
!! \attention  \fortran_approved
!!
!! \param dset_id  Identifier of the dataset containing reference to the regions.
!! \param ref      Reference to open.
!! \param space_id Dataspace identifier.
!! \param hdferr   \fortran_error
!!
!! See C API: @ref H5Rget_region()
!!
#ifdef H5_DOXYGEN
  SUBROUTINE h5rget_region_f(&
#else
  SUBROUTINE h5rget_region_ptr_f(&
#endif
       dset_id, ref, space_id, hdferr)
    IMPLICIT NONE
    INTEGER(HID_T), INTENT(IN) :: dset_id
    TYPE(C_PTR), INTENT(IN) :: ref
    INTEGER(HID_T), INTENT(OUT) :: space_id
    INTEGER, INTENT(OUT) :: hdferr

    hdferr = h5rget_region_ptr_c(dset_id, ref, space_id)

#ifdef H5_DOXYGEN
  END SUBROUTINE h5rget_region_f
#else
  END SUBROUTINE h5rget_region_ptr_f
#endif

!>
!! \ingroup FH5R
!!
!! \brief Creates reference to the object.
!!
!! \attention  \fortran_obsolete
!!
!! \param loc_id Location identifier.
!! \param name   Name of the object at the specified location.
!! \param ref    Reference to the specified object.
!! \param hdferr \fortran_error
!!
!! See C API: @ref H5Rcreate_object()
!!
  SUBROUTINE h5rcreate_object_f(loc_id, name, ref, hdferr)
    USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_PTR
    IMPLICIT NONE
    INTEGER(HID_T), INTENT(IN) :: loc_id
    CHARACTER(LEN=*), INTENT(IN) :: name
    TYPE(hobj_ref_t_f), INTENT(INOUT), TARGET :: ref
    INTEGER, INTENT(OUT) :: hdferr
    INTEGER :: namelen                     ! Name length
    TYPE(C_PTR) :: f_ptr

    f_ptr = C_LOC(ref)

    namelen = LEN(name)

    hdferr = h5rcreate_ptr_c(f_ptr, loc_id, name, namelen, INT(0), INT(-1,HID_T))

  END SUBROUTINE h5rcreate_object_f

!>
!! \ingroup FH5R
!!
!! \brief Creates reference to the dataset region
!!
!! \attention  \fortran_obsolete
!!
!! \param loc_id   Location identifier.
!! \param name     Name of the dataset at the specified location.
!! \param space_id Dataspace identifier that describes selected region.
!! \param ref      Reference to the dataset region.
!! \param hdferr   \fortran_error
!!
!! See C API: @ref H5Rcreate_region()
!!
  SUBROUTINE h5rcreate_region_f(loc_id, name, space_id, ref, hdferr)
    IMPLICIT NONE
    INTEGER(HID_T), INTENT(IN) :: loc_id
    CHARACTER(LEN=*), INTENT(IN) :: name
    INTEGER(HID_T), INTENT(IN) :: space_id
    TYPE(hdset_reg_ref_t_f), INTENT(OUT) :: ref
    INTEGER, INTENT(OUT) :: hdferr
    INTEGER :: namelen                     ! Name length
    INTEGER :: ref_f(REF_REG_BUF_LEN)      ! Local buffer to pass reference

    INTERFACE
       INTEGER FUNCTION h5rcreate_region_c(ref_f, loc_id, name, namelen, space_id) BIND(C,NAME='h5rcreate_region_c')
         IMPORT :: HID_T, REF_REG_BUF_LEN
         IMPORT :: C_CHAR
         IMPLICIT NONE
         INTEGER :: ref_f(REF_REG_BUF_LEN)
         INTEGER(HID_T), INTENT(IN) :: loc_id
         CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: name
         INTEGER :: namelen
         INTEGER(HID_T), INTENT(IN) :: space_id
       END FUNCTION h5rcreate_region_c
    END INTERFACE

    namelen = LEN(name)
    ref_f = 0
    hdferr = h5rcreate_region_c(ref_f, loc_id, name, namelen, space_id )
    ref%ref = ref_f

  END SUBROUTINE h5rcreate_region_f

!>
!! \ingroup FH5R
!!
!! \brief Creates a reference.
!!
!! \attention  \fortran_approved
!!
!! \param loc_id   Location identifier.
!! \param name     Name of the dataset at the specified location.
!! \param ref_type Type of reference:
!!                 \li H5R_OBJECT_F
!!                 \li H5T_STD_REF_DSETREG_F
!! \param ref      Reference created by the function call.
!! \param hdferr   \fortran_error
!! \param space_id Dataspace identifier that describes selected region.
!!
#ifdef H5_DOXYGEN
!! See C API: @ref H5Rcreate_object()
!!
  SUBROUTINE h5rcreate_f(&
#else
  SUBROUTINE h5rcreate_ptr_f(&
#endif
       loc_id, name, ref_type, ref, hdferr, space_id)
    USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_PTR
    IMPLICIT NONE
    INTEGER(HID_T), INTENT(IN) :: loc_id
    CHARACTER(LEN=*), INTENT(IN) :: name
    INTEGER, INTENT(IN) :: ref_type
    TYPE(C_PTR), INTENT(INOUT) :: ref
    INTEGER, INTENT(OUT) :: hdferr
    INTEGER(HID_T), INTENT(IN), OPTIONAL :: space_id
    INTEGER :: namelen                       ! Name length
    INTEGER(HID_T) :: space_id_c

    namelen = LEN(name)
    space_id_c = -1
    IF(PRESENT(space_id)) space_id_c =  space_id
    hdferr = h5rcreate_ptr_c(ref, loc_id, name, namelen, ref_type, space_id_c)

#ifdef H5_DOXYGEN
  END SUBROUTINE h5rcreate_f
#else
  END SUBROUTINE h5rcreate_ptr_f
#endif
!>
!! \ingroup FH5R
!!
!! \brief Opens the HDF5 object referenced
!!
!! \attention  \fortran_obsolete
!!
!! \param obj_id     Identifier of the dataset containing reference.
!! \param ref        Reference to open.
!! \param ref_obj_id Object_identifier.
!! \param hdferr     \fortran_error
!!
  SUBROUTINE h5rdereference_object_f(obj_id, ref, ref_obj_id, hdferr)
    USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_PTR
    IMPLICIT NONE
    INTEGER(HID_T), INTENT(IN) :: obj_id
    TYPE(hobj_ref_t_f), INTENT(IN), TARGET :: ref
    INTEGER(HID_T), INTENT(OUT) :: ref_obj_id
    INTEGER, INTENT(OUT) :: hdferr
    TYPE(C_PTR) :: f_ptr

    f_ptr = C_LOC(ref)
    hdferr = h5rdereference_ptr_c(obj_id, 0, f_ptr, ref_obj_id)

  END SUBROUTINE h5rdereference_object_f

!>
!! \ingroup FH5R
!!
!! \brief Opens the dataset region
!!
!! \attention  \fortran_obsolete
!!
!! \param obj_id     Object identifier.
!! \param ref        Reference to open.
!! \param ref_obj_id Identifier of the object containing reference to the regions.
!! \param hdferr     \fortran_error
!!
  SUBROUTINE h5rdereference_region_f(obj_id, ref, ref_obj_id, hdferr)
    USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_PTR
    IMPLICIT NONE
    INTEGER(HID_T), INTENT(IN) :: obj_id
    TYPE(hdset_reg_ref_t_f), INTENT(IN), TARGET :: ref
    INTEGER(HID_T), INTENT(OUT) :: ref_obj_id
    INTEGER, INTENT(OUT) :: hdferr
    TYPE(C_PTR) :: f_ptr

    f_ptr = C_LOC(ref)
    hdferr = h5rdereference_ptr_c(obj_id, 1, f_ptr, ref_obj_id)

  END SUBROUTINE h5rdereference_region_f

!>
!! \ingroup FH5R
!!
!! \brief Opens the HDF5 object referenced.
!!
!! \attention  \fortran_approved
!!
!! \param obj_id     Valid identifier for the file containing the referenced object or any object in that file.
!! \param ref_type   The reference type of ref.
!! \param ref        Reference to open.
!! \param ref_obj_id Identifier of referenced object.
!! \param hdferr     \fortran_error
!!
  SUBROUTINE h5rdereference_ptr_f(obj_id, ref_type, ref, ref_obj_id, hdferr)
    USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_PTR
    IMPLICIT NONE
    INTEGER(HID_T), INTENT(IN) :: obj_id
    INTEGER, INTENT(IN) :: ref_type
    TYPE(C_PTR), INTENT(IN) :: ref
    INTEGER(HID_T), INTENT(OUT) :: ref_obj_id
    INTEGER, INTENT(OUT) :: hdferr

    hdferr = h5rdereference_ptr_c(obj_id, ref_type, ref, ref_obj_id)

  END SUBROUTINE h5rdereference_ptr_f

!>
!! \ingroup FH5R
!!
!! \brief Retrieves a name of a referenced object.
!!
!! \attention  \fortran_obsolete
!!
!! \param loc_id Identifier for the file containing the reference or for any object in that file.
!! \param ref    An object or dataset region reference.
!! \param name   A name associated with the referenced object or dataset region.
!! \param hdferr \fortran_error
!! \param size   The size of the name buffer, returning 0 (zero) if no name is associated with the identifier.
!!
  SUBROUTINE h5rget_name_object_f(loc_id,  ref, name, hdferr, size)
    USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_PTR
    IMPLICIT NONE
    INTEGER(HID_T), INTENT(IN) :: loc_id
    TYPE(hobj_ref_t_f), INTENT(IN), TARGET :: ref
    INTEGER(SIZE_T), INTENT(OUT), OPTIONAL :: size
    CHARACTER(LEN=*), INTENT(INOUT) :: name
    INTEGER, INTENT(OUT) :: hdferr

    INTEGER(SIZE_T) :: size_default
    INTEGER(SIZE_T) :: name_len
    TYPE(C_PTR) :: f_ptr

    f_ptr = C_LOC(ref)

    name_len=LEN(name)

    hdferr = h5rget_name_ptr_c(loc_id, 0, f_ptr, name, name_len, size_default)

    IF(PRESENT(size)) size = size_default

  END SUBROUTINE h5rget_name_object_f

!>
!! \ingroup FH5R
!!
!! \brief Retrieves a name of a dataset region.
!!
!! \attention  \fortran_obsolete
!!
!! \param loc_id Identifier for the file containing the reference or for any object in that file.
!! \param ref    An object or dataset region reference.
!! \param name   A name associated with the referenced object or dataset region.
!! \param hdferr \fortran_error
!! \param size   The size of the name buffer, returning 0 (zero) if no name is associated with the identifier.
!!
  SUBROUTINE h5rget_name_region_f(loc_id, ref, name, hdferr, size)
    USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_PTR
    IMPLICIT NONE
    INTEGER(HID_T), INTENT(IN) :: loc_id
    TYPE(hdset_reg_ref_t_f), INTENT(IN), TARGET :: ref
    INTEGER(SIZE_T), INTENT(OUT), OPTIONAL :: size
    CHARACTER(LEN=*), INTENT(INOUT) :: name
    INTEGER, INTENT(OUT) :: hdferr
    INTEGER(SIZE_T) :: size_default
    INTEGER(SIZE_T) :: name_len
    TYPE(C_PTR) :: f_ptr

    f_ptr = C_LOC(ref)

    name_len=LEN(name)

    hdferr = h5rget_name_ptr_c(loc_id, 1, f_ptr, name, name_len, size_default)

    IF(PRESENT(size)) size = size_default

  END SUBROUTINE h5rget_name_region_f

!>
!! \ingroup FH5R
!!
!! \brief Retrieves a name of a referenced object.
!!
!! \attention  \fortran_approved
!!
!! \param loc_id   Identifier for the file containing the reference or for any object in that file.
!! \param ref_type Type of reference.
!! \param ref      An object or dataset region reference.
!! \param name     A name associated with the referenced object or dataset ptr.
!! \param hdferr   \fortran_error
!!\param  size     The size of the name buffer, returning 0 (zero) if no name is associated with the identifier.
!!

#ifdef H5_DOXYGEN
!! See C API: @ref H5Rget_name()
!!
  SUBROUTINE h5rget_name_f(&
#else
  SUBROUTINE h5rget_name_ptr_f(&
#endif
       loc_id, ref_type, ref, name, hdferr, size)
    USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_PTR
    IMPLICIT NONE
    INTEGER(HID_T), INTENT(IN) :: loc_id
    INTEGER, INTENT(IN) :: ref_type
    TYPE(C_PTR), INTENT(IN) :: ref
    CHARACTER(LEN=*), INTENT(INOUT) :: name
    INTEGER, INTENT(OUT) :: hdferr
    INTEGER(SIZE_T), INTENT(OUT), OPTIONAL :: size
    INTEGER(SIZE_T) :: size_default
    INTEGER(SIZE_T) :: name_len

    name_len=LEN(name)

    hdferr = h5rget_name_ptr_c(loc_id, ref_type, ref, name, name_len, size_default)

    IF(PRESENT(size)) size = size_default

#ifdef H5_DOXYGEN
  END SUBROUTINE h5rget_name_f
#else
  END SUBROUTINE h5rget_name_ptr_f
#endif

!>
!! \ingroup FH5R
!!
!! \brief Retrieves the type of object that an object reference points to.
!!
!! \param loc_id   Identifier for the dataset containing the reference or for the group that dataset is in.
!! \param ref_type Type of reference to query.
!! \param ref      Reference to query.
!! \param obj_type Type of referenced object:
!!                   \li H5G_UNKNOWN_F
!!                   \li H5G_GROUP_F
!!                   \li H5G_DATASET_F
!!                   \li H5G_TYPE_F
!! \param hdferr   \fortran_error
!!
!! See C API: @ref H5Rget_obj_type3()
!!
  SUBROUTINE h5rget_obj_type_f(loc_id, ref_type, ref, obj_type, hdferr)

    IMPLICIT NONE
    INTEGER(HID_T), INTENT(IN) :: loc_id
    INTEGER, INTENT(IN) :: ref_type
    TYPE(C_PTR), INTENT(IN) :: ref
    INTEGER, INTENT(OUT) :: obj_type
    INTEGER, INTENT(OUT) :: hdferr

    INTERFACE
       INTEGER FUNCTION h5rget_obj_type_c(loc_id, ref_type, ref, obj_type) &
            BIND(C, NAME='h5rget_obj_type_c')
         IMPORT :: C_PTR
         IMPORT :: HID_T
         IMPLICIT NONE
         INTEGER(HID_T), INTENT(IN) :: loc_id
         INTEGER, INTENT(IN) :: ref_type
         TYPE(C_PTR), VALUE :: ref
         INTEGER :: obj_type
       END FUNCTION h5rget_obj_type_c
    END INTERFACE

    hdferr = h5rget_obj_type_c(loc_id, ref_type, ref, obj_type)

  END SUBROUTINE h5rget_obj_type_f

END MODULE H5R